[llvm] [Utils][update_llc_test_checks] Support generating asm tests from templates. (PR #168946)

Ivan Kosarev via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 20 13:04:45 PST 2025


https://github.com/kosarev created https://github.com/llvm/llvm-project/pull/168946

Reduces the pain of manual editing tests applying the same
changes over multiple instructions and keeping them consistent.

>From 600917e2ccde6967281254195f456831085e42fc Mon Sep 17 00:00:00 2001
From: Ivan Kosarev <ivan.kosarev at amd.com>
Date: Thu, 20 Nov 2025 20:27:22 +0000
Subject: [PATCH] [Utils][update_llc_test_checks] Support generating asm tests
 from templates.

Reduces the pain of manual editing tests applying the same
changes over multiple instructions and keeping them consistent.
---
 llvm/test/MC/AMDGPU/gfx11_asm_vop1.s | 622 ++++++++++++++++++++-------
 llvm/utils/update_mc_test_checks.py  | 104 ++++-
 2 files changed, 567 insertions(+), 159 deletions(-)

diff --git a/llvm/test/MC/AMDGPU/gfx11_asm_vop1.s b/llvm/test/MC/AMDGPU/gfx11_asm_vop1.s
index f1438532d7c5e..5b4689b2954df 100644
--- a/llvm/test/MC/AMDGPU/gfx11_asm_vop1.s
+++ b/llvm/test/MC/AMDGPU/gfx11_asm_vop1.s
@@ -1,8 +1,195 @@
-// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --unique --version 5
+// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5
 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize32 -show-encoding %s | FileCheck --check-prefix=GFX11 %s
 // RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16,+wavefrontsize64 -show-encoding %s | FileCheck --check-prefix=GFX11 %s
 
-v_bfrev_b32_e32 v5, v1
+//  INSTS=
+//      v_bfrev_b32 OPS32
+//      v_ceil_f16 OPS16
+//      v_ceil_f32 OPS32
+//      v_ceil_f64 OPS64
+//      v_cls_i32 OPS32
+//      v_clz_i32_u32 OPS32
+//      v_cos_f16 OPS16
+//      v_cos_f32 OPS32
+//      v_ctz_i32_b32 OPS32
+//      v_cvt_f16_f32 v5.l, SRC32
+//      v_cvt_f16_f32 v127.h, 0xaf123456
+//      v_cvt_f16_f32 v127.l, 0.5
+//      v_cvt_f16_i16 OPS16
+//      v_cvt_f16_u16 OPS16
+//      v_cvt_f32_f16 OPS_32_16
+//      v_cvt_f32_f64 OPS_32_64
+//      v_cvt_f32_i32 OPS32
+//      v_cvt_f32_u32 OPS32
+//      v_cvt_f32_ubyte0 OPS32
+//      v_cvt_f32_ubyte1 OPS32
+//      v_cvt_f32_ubyte2 OPS32
+//      v_cvt_f32_ubyte3 OPS32
+//      v_cvt_f64_f32 OPS_64_32
+//      v_cvt_f64_i32 OPS_64_32
+//      v_cvt_f64_u32 OPS_64_32
+//      v_cvt_floor_i32_f32 OPS32
+//      v_cvt_flr_i32_f32 OPS32
+//      v_cvt_i16_f16 OPS16
+//      v_cvt_i32_f32 OPS32
+//      v_cvt_i32_f64 OPS_32_64
+//      v_cvt_i32_i16 OPS_32_16
+//      v_cvt_nearest_i32_f32 OPS32
+//      v_cvt_norm_i16_f16 OPS16
+//      v_cvt_norm_u16_f16 OPS16
+//      v_cvt_off_f32_i4 v5, SRC32
+//      v_cvt_off_f32_i4 v255, 0x4f
+//      v_cvt_rpi_i32_f32 OPS32
+//      v_cvt_u16_f16 OPS16
+//      v_cvt_u32_f32 OPS32
+//      v_cvt_u32_f64 OPS_32_64
+//      v_cvt_u32_u16 OPS_32_16
+//      v_exp_f16 OPS16
+//      v_exp_f32 OPS32
+//      v_ffbh_i32 OPS32
+//      v_ffbh_u32 OPS32
+//      v_ffbl_b32 OPS32
+//      v_floor_f16 OPS16
+//      v_floor_f32 OPS32
+//      v_floor_f64 OPS64
+//      v_fract_f16 OPS16
+//      v_fract_f32 OPS32
+//      v_fract_f64 OPS64
+//      v_frexp_exp_i16_f16 OPS16
+//      v_frexp_exp_i32_f32 OPS32
+//      v_frexp_exp_i32_f64 OPS_32_64
+//      v_frexp_mant_f16 OPS16
+//      v_frexp_mant_f32 OPS32
+//      v_frexp_mant_f64 OPS64
+//      v_log_f16 OPS16
+//      v_log_f32 OPS32
+//      v_mov_b16_e32 OPS16
+//      v_mov_b16_e64 OPS16
+//      v_mov_b32 OPS32
+//      v_movreld_b32 OPS32
+//      v_movrels_b32 v5, v1
+//      v_movrels_b32 v255, v255
+//      v_movrelsd_2_b32 v5, v1
+//      v_movrelsd_2_b32 v255, v255
+//      v_movrelsd_b32 v5, v1
+//      v_movrelsd_b32 v255, v255
+//      v_nop
+//      v_not_b16 OPS16
+//      v_not_b32 OPS32
+//      v_permlane64_b32 v5, v1
+//      v_permlane64_b32 v255, v255
+//      v_pipeflush
+//      v_rcp_f16 OPS16
+//      v_rcp_f32 OPS32
+//      v_rcp_f64 OPS64
+//      v_rcp_iflag_f32 OPS32
+//      v_readfirstlane_b32 s5, v1
+//      v_readfirstlane_b32 s105, v1
+//      v_readfirstlane_b32 vcc_lo, v1
+//      v_readfirstlane_b32 vcc_hi, v1
+//      v_readfirstlane_b32 ttmp15, v1
+//      v_readfirstlane_b32 null, v255
+//      v_rndne_f16 OPS16
+//      v_rndne_f32 OPS32
+//      v_rndne_f64 OPS64
+//      v_rsq_f16 OPS16
+//      v_rsq_f32 OPS32
+//      v_rsq_f64 OPS64
+//      v_sat_pk_u8_i16 v5.l, SRC32
+//      v_sat_pk_u8_i16 v127.l, 0xfe0b
+//      v_sat_pk_u8_i16 v127.l, 0.5
+//      v_sat_pk_u8_i16 v5.h, src_scc
+//      v_sat_pk_u8_i16 v127.h, 0xfe0b
+//      v_sin_f16 OPS16
+//      v_sin_f32 OPS32
+//      v_sqrt_f16 OPS16
+//      v_sqrt_f32 OPS32
+//      v_sqrt_f64 OPS64
+//      v_swap_b16 v5.l, v1.h
+//      v_swap_b16 v5.h, v1.l
+//      v_swap_b16 v127.l, v127.l
+//      v_swap_b32 v5, v1
+//      v_swap_b32 v255, v255
+//      v_swaprel_b32 v5, v1
+//      v_swaprel_b32 v255, v255
+//      v_trunc_f16 OPS16
+//      v_trunc_f32 OPS32
+//      v_trunc_f64 OPS64
+//
+//  SRC16=
+//      v1.l
+//      v127.l
+//      v1.h
+//      v127.h
+//      s1
+//      s105
+//      vcc_lo
+//      vcc_hi
+//      ttmp15
+//      m0
+//      exec_lo
+//      exec_hi
+//      null
+//      -1
+//      0.5
+//      src_scc
+//
+//  OPS16=
+//      v5.l, SRC16
+//      v5.l, 0xfe0b
+//      v5.h, src_scc
+//      v127.h, 0xfe0b
+//
+//  SRC32=
+//      v1
+//      v255
+//      s1
+//      s105
+//      vcc_lo
+//      vcc_hi
+//      ttmp15
+//      m0
+//      exec_lo
+//      exec_hi
+//      null
+//      -1
+//      0.5
+//      src_scc
+//
+//  OPS32=
+//      v5, SRC32
+//      v255, 0xaf123456
+//
+//  SRC64=
+//      v[1:2]
+//      v[254:255]
+//      s[2:3]
+//      s[104:105]
+//      vcc
+//      ttmp[14:15]
+//      exec
+//      null
+//      -1
+//      0.5
+//      src_scc
+//
+//  OPS64=
+//      v[5:6], SRC64
+//      v[254:255], 0xaf123456
+//
+//  OPS_32_16=
+//      v5, SRC16
+//      v255, 0xfe0b
+//
+//  OPS_32_64=
+//      v5, SRC64
+//      v255, 0xaf123456
+//
+//  OPS_64_32=
+//      v[5:6], SRC32
+//      v[254:255], 0xaf123456
+
+v_bfrev_b32 v5, v1
 // GFX11: v_bfrev_b32_e32 v5, v1                  ; encoding: [0x01,0x71,0x0a,0x7e]
 
 v_bfrev_b32 v5, v255
@@ -89,8 +276,14 @@ v_ceil_f16 v5.l, null
 v_ceil_f16 v5.l, -1
 // GFX11: v_ceil_f16_e32 v5.l, -1                 ; encoding: [0xc1,0xb8,0x0a,0x7e]
 
-v_ceil_f16 v127.l, 0.5
-// GFX11: v_ceil_f16_e32 v127.l, 0.5              ; encoding: [0xf0,0xb8,0xfe,0x7e]
+v_ceil_f16 v5.l, 0.5
+// GFX11: v_ceil_f16_e32 v5.l, 0.5                ; encoding: [0xf0,0xb8,0x0a,0x7e]
+
+v_ceil_f16 v5.l, src_scc
+// GFX11: v_ceil_f16_e32 v5.l, src_scc            ; encoding: [0xfd,0xb8,0x0a,0x7e]
+
+v_ceil_f16 v5.l, 0xfe0b
+// GFX11: v_ceil_f16_e32 v5.l, 0xfe0b             ; encoding: [0xff,0xb8,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_ceil_f16 v5.h, src_scc
 // GFX11: v_ceil_f16_e32 v5.h, src_scc            ; encoding: [0xfd,0xb8,0x0a,0x7f]
@@ -275,6 +468,12 @@ v_cos_f16 v5.l, v1.l
 v_cos_f16 v5.l, v127.l
 // GFX11: v_cos_f16_e32 v5.l, v127.l              ; encoding: [0x7f,0xc3,0x0a,0x7e]
 
+v_cos_f16 v5.l, v1.h
+// GFX11: v_cos_f16_e32 v5.l, v1.h                ; encoding: [0x81,0xc3,0x0a,0x7e]
+
+v_cos_f16 v5.l, v127.h
+// GFX11: v_cos_f16_e32 v5.l, v127.h              ; encoding: [0xff,0xc3,0x0a,0x7e]
+
 v_cos_f16 v5.l, s1
 // GFX11: v_cos_f16_e32 v5.l, s1                  ; encoding: [0x01,0xc2,0x0a,0x7e]
 
@@ -311,17 +510,8 @@ v_cos_f16 v5.l, 0.5
 v_cos_f16 v5.l, src_scc
 // GFX11: v_cos_f16_e32 v5.l, src_scc             ; encoding: [0xfd,0xc2,0x0a,0x7e]
 
-v_cos_f16 v127.l, 0xfe0b
-// GFX11: v_cos_f16_e32 v127.l, 0xfe0b            ; encoding: [0xff,0xc2,0xfe,0x7e,0x0b,0xfe,0x00,0x00]
-
-v_cos_f16 v5.l, v1.h
-// GFX11: v_cos_f16_e32 v5.l, v1.h                ; encoding: [0x81,0xc3,0x0a,0x7e]
-
-v_cos_f16 v5.l, v127.h
-// GFX11: v_cos_f16_e32 v5.l, v127.h              ; encoding: [0xff,0xc3,0x0a,0x7e]
-
-v_cos_f16 v127.l, 0.5
-// GFX11: v_cos_f16_e32 v127.l, 0.5               ; encoding: [0xf0,0xc2,0xfe,0x7e]
+v_cos_f16 v5.l, 0xfe0b
+// GFX11: v_cos_f16_e32 v5.l, 0xfe0b              ; encoding: [0xff,0xc2,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_cos_f16 v5.h, src_scc
 // GFX11: v_cos_f16_e32 v5.h, src_scc             ; encoding: [0xfd,0xc2,0x0a,0x7f]
@@ -458,8 +648,8 @@ v_cvt_f16_f32 v5.l, -1
 v_cvt_f16_f32 v5.l, 0.5
 // GFX11: v_cvt_f16_f32_e32 v5.l, 0.5             ; encoding: [0xf0,0x14,0x0a,0x7e]
 
-v_cvt_f16_f32 v5.h, src_scc
-// GFX11: v_cvt_f16_f32_e32 v5.h, src_scc         ; encoding: [0xfd,0x14,0x0a,0x7f]
+v_cvt_f16_f32 v5.l, src_scc
+// GFX11: v_cvt_f16_f32_e32 v5.l, src_scc         ; encoding: [0xfd,0x14,0x0a,0x7e]
 
 v_cvt_f16_f32 v127.h, 0xaf123456
 // GFX11: v_cvt_f16_f32_e32 v127.h, 0xaf123456    ; encoding: [0xff,0x14,0xfe,0x7f,0x56,0x34,0x12,0xaf]
@@ -509,12 +699,15 @@ v_cvt_f16_i16 v5.l, null
 v_cvt_f16_i16 v5.l, -1
 // GFX11: v_cvt_f16_i16_e32 v5.l, -1              ; encoding: [0xc1,0xa2,0x0a,0x7e]
 
-v_cvt_f16_i16 v127.l, 0.5
-// GFX11: v_cvt_f16_i16_e32 v127.l, 0.5           ; encoding: [0xf0,0xa2,0xfe,0x7e]
-
 v_cvt_f16_i16 v5.l, 0.5
 // GFX11: v_cvt_f16_i16_e32 v5.l, 0.5             ; encoding: [0xf0,0xa2,0x0a,0x7e]
 
+v_cvt_f16_i16 v5.l, src_scc
+// GFX11: v_cvt_f16_i16_e32 v5.l, src_scc         ; encoding: [0xfd,0xa2,0x0a,0x7e]
+
+v_cvt_f16_i16 v5.l, 0xfe0b
+// GFX11: v_cvt_f16_i16_e32 v5.l, 0xfe0b          ; encoding: [0xff,0xa2,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
+
 v_cvt_f16_i16 v5.h, src_scc
 // GFX11: v_cvt_f16_i16_e32 v5.h, src_scc         ; encoding: [0xfd,0xa2,0x0a,0x7f]
 
@@ -563,11 +756,14 @@ v_cvt_f16_u16 v5.l, null
 v_cvt_f16_u16 v5.l, -1
 // GFX11: v_cvt_f16_u16_e32 v5.l, -1              ; encoding: [0xc1,0xa0,0x0a,0x7e]
 
-v_cvt_f16_u16 v127.l, 0.5
-// GFX11: v_cvt_f16_u16_e32 v127.l, 0.5           ; encoding: [0xf0,0xa0,0xfe,0x7e]
+v_cvt_f16_u16 v5.l, 0.5
+// GFX11: v_cvt_f16_u16_e32 v5.l, 0.5             ; encoding: [0xf0,0xa0,0x0a,0x7e]
+
+v_cvt_f16_u16 v5.l, src_scc
+// GFX11: v_cvt_f16_u16_e32 v5.l, src_scc         ; encoding: [0xfd,0xa0,0x0a,0x7e]
 
-v_cvt_f16_u16 v5, 0.5
-// GFX11: v_cvt_f16_u16_e32 v5, 0.5               ; encoding: [0xf0,0xa0,0x0a,0x7e]
+v_cvt_f16_u16 v5.l, 0xfe0b
+// GFX11: v_cvt_f16_u16_e32 v5.l, 0xfe0b          ; encoding: [0xff,0xa0,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_cvt_f16_u16 v5.h, src_scc
 // GFX11: v_cvt_f16_u16_e32 v5.h, src_scc         ; encoding: [0xfd,0xa0,0x0a,0x7f]
@@ -1199,8 +1395,14 @@ v_cvt_i16_f16 v5.l, null
 v_cvt_i16_f16 v5.l, -1
 // GFX11: v_cvt_i16_f16_e32 v5.l, -1              ; encoding: [0xc1,0xa6,0x0a,0x7e]
 
-v_cvt_i16_f16 v127.l, 0.5
-// GFX11: v_cvt_i16_f16_e32 v127.l, 0.5           ; encoding: [0xf0,0xa6,0xfe,0x7e]
+v_cvt_i16_f16 v5.l, 0.5
+// GFX11: v_cvt_i16_f16_e32 v5.l, 0.5             ; encoding: [0xf0,0xa6,0x0a,0x7e]
+
+v_cvt_i16_f16 v5.l, src_scc
+// GFX11: v_cvt_i16_f16_e32 v5.l, src_scc         ; encoding: [0xfd,0xa6,0x0a,0x7e]
+
+v_cvt_i16_f16 v5.l, 0xfe0b
+// GFX11: v_cvt_i16_f16_e32 v5.l, 0xfe0b          ; encoding: [0xff,0xa6,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_cvt_i16_f16 v5.h, src_scc
 // GFX11: v_cvt_i16_f16_e32 v5.h, src_scc         ; encoding: [0xfd,0xa6,0x0a,0x7f]
@@ -1295,6 +1497,12 @@ v_cvt_i32_i16 v5, v1.l
 v_cvt_i32_i16 v5, v127.l
 // GFX11: v_cvt_i32_i16_e32 v5, v127.l            ; encoding: [0x7f,0xd5,0x0a,0x7e]
 
+v_cvt_i32_i16 v5, v1.h
+// GFX11: v_cvt_i32_i16_e32 v5, v1.h              ; encoding: [0x81,0xd5,0x0a,0x7e]
+
+v_cvt_i32_i16 v5, v127.h
+// GFX11: v_cvt_i32_i16_e32 v5, v127.h            ; encoding: [0xff,0xd5,0x0a,0x7e]
+
 v_cvt_i32_i16 v5, s1
 // GFX11: v_cvt_i32_i16_e32 v5, s1                ; encoding: [0x01,0xd4,0x0a,0x7e]
 
@@ -1334,12 +1542,6 @@ v_cvt_i32_i16 v5, src_scc
 v_cvt_i32_i16 v255, 0xfe0b
 // GFX11: v_cvt_i32_i16_e32 v255, 0xfe0b          ; encoding: [0xff,0xd4,0xfe,0x7f,0x0b,0xfe,0x00,0x00]
 
-v_cvt_i32_i16 v5, v1.h
-// GFX11: v_cvt_i32_i16_e32 v5, v1.h              ; encoding: [0x81,0xd5,0x0a,0x7e]
-
-v_cvt_i32_i16 v5, v127.h
-// GFX11: v_cvt_i32_i16_e32 v5, v127.h            ; encoding: [0xff,0xd5,0x0a,0x7e]
-
 v_cvt_nearest_i32_f32 v5, v1
 // GFX11: v_cvt_nearest_i32_f32_e32 v5, v1        ; encoding: [0x01,0x19,0x0a,0x7e]
 
@@ -1427,8 +1629,14 @@ v_cvt_norm_i16_f16 v5.l, null
 v_cvt_norm_i16_f16 v5.l, -1
 // GFX11: v_cvt_norm_i16_f16_e32 v5.l, -1         ; encoding: [0xc1,0xc6,0x0a,0x7e]
 
-v_cvt_norm_i16_f16 v127.l, 0.5
-// GFX11: v_cvt_norm_i16_f16_e32 v127.l, 0.5      ; encoding: [0xf0,0xc6,0xfe,0x7e]
+v_cvt_norm_i16_f16 v5.l, 0.5
+// GFX11: v_cvt_norm_i16_f16_e32 v5.l, 0.5        ; encoding: [0xf0,0xc6,0x0a,0x7e]
+
+v_cvt_norm_i16_f16 v5.l, src_scc
+// GFX11: v_cvt_norm_i16_f16_e32 v5.l, src_scc    ; encoding: [0xfd,0xc6,0x0a,0x7e]
+
+v_cvt_norm_i16_f16 v5.l, 0xfe0b
+// GFX11: v_cvt_norm_i16_f16_e32 v5.l, 0xfe0b     ; encoding: [0xff,0xc6,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_cvt_norm_i16_f16 v5.h, src_scc
 // GFX11: v_cvt_norm_i16_f16_e32 v5.h, src_scc    ; encoding: [0xfd,0xc6,0x0a,0x7f]
@@ -1478,8 +1686,14 @@ v_cvt_norm_u16_f16 v5.l, null
 v_cvt_norm_u16_f16 v5.l, -1
 // GFX11: v_cvt_norm_u16_f16_e32 v5.l, -1         ; encoding: [0xc1,0xc8,0x0a,0x7e]
 
-v_cvt_norm_u16_f16 v127.l, 0.5
-// GFX11: v_cvt_norm_u16_f16_e32 v127.l, 0.5      ; encoding: [0xf0,0xc8,0xfe,0x7e]
+v_cvt_norm_u16_f16 v5.l, 0.5
+// GFX11: v_cvt_norm_u16_f16_e32 v5.l, 0.5        ; encoding: [0xf0,0xc8,0x0a,0x7e]
+
+v_cvt_norm_u16_f16 v5.l, src_scc
+// GFX11: v_cvt_norm_u16_f16_e32 v5.l, src_scc    ; encoding: [0xfd,0xc8,0x0a,0x7e]
+
+v_cvt_norm_u16_f16 v5.l, 0xfe0b
+// GFX11: v_cvt_norm_u16_f16_e32 v5.l, 0xfe0b     ; encoding: [0xff,0xc8,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_cvt_norm_u16_f16 v5.h, src_scc
 // GFX11: v_cvt_norm_u16_f16_e32 v5.h, src_scc    ; encoding: [0xfd,0xc8,0x0a,0x7f]
@@ -1619,8 +1833,14 @@ v_cvt_u16_f16 v5.l, null
 v_cvt_u16_f16 v5.l, -1
 // GFX11: v_cvt_u16_f16_e32 v5.l, -1              ; encoding: [0xc1,0xa4,0x0a,0x7e]
 
-v_cvt_u16_f16 v127.l, 0.5
-// GFX11: v_cvt_u16_f16_e32 v127.l, 0.5           ; encoding: [0xf0,0xa4,0xfe,0x7e]
+v_cvt_u16_f16 v5.l, 0.5
+// GFX11: v_cvt_u16_f16_e32 v5.l, 0.5             ; encoding: [0xf0,0xa4,0x0a,0x7e]
+
+v_cvt_u16_f16 v5.l, src_scc
+// GFX11: v_cvt_u16_f16_e32 v5.l, src_scc         ; encoding: [0xfd,0xa4,0x0a,0x7e]
+
+v_cvt_u16_f16 v5.l, 0xfe0b
+// GFX11: v_cvt_u16_f16_e32 v5.l, 0xfe0b          ; encoding: [0xff,0xa4,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_cvt_u16_f16 v5.h, src_scc
 // GFX11: v_cvt_u16_f16_e32 v5.h, src_scc         ; encoding: [0xfd,0xa4,0x0a,0x7f]
@@ -1715,6 +1935,12 @@ v_cvt_u32_u16 v5, v1.l
 v_cvt_u32_u16 v5, v127.l
 // GFX11: v_cvt_u32_u16_e32 v5, v127.l            ; encoding: [0x7f,0xd7,0x0a,0x7e]
 
+v_cvt_u32_u16 v5, v1.h
+// GFX11: v_cvt_u32_u16_e32 v5, v1.h              ; encoding: [0x81,0xd7,0x0a,0x7e]
+
+v_cvt_u32_u16 v5, v127.h
+// GFX11: v_cvt_u32_u16_e32 v5, v127.h            ; encoding: [0xff,0xd7,0x0a,0x7e]
+
 v_cvt_u32_u16 v5, s1
 // GFX11: v_cvt_u32_u16_e32 v5, s1                ; encoding: [0x01,0xd6,0x0a,0x7e]
 
@@ -1754,12 +1980,6 @@ v_cvt_u32_u16 v5, src_scc
 v_cvt_u32_u16 v255, 0xfe0b
 // GFX11: v_cvt_u32_u16_e32 v255, 0xfe0b          ; encoding: [0xff,0xd6,0xfe,0x7f,0x0b,0xfe,0x00,0x00]
 
-v_cvt_u32_u16 v5, v1.h
-// GFX11: v_cvt_u32_u16_e32 v5, v1.h              ; encoding: [0x81,0xd7,0x0a,0x7e]
-
-v_cvt_u32_u16 v5, v127.h
-// GFX11: v_cvt_u32_u16_e32 v5, v127.h            ; encoding: [0xff,0xd7,0x0a,0x7e]
-
 v_exp_f16 v5.l, v1.l
 // GFX11: v_exp_f16_e32 v5.l, v1.l                ; encoding: [0x01,0xb1,0x0a,0x7e]
 
@@ -1802,8 +2022,14 @@ v_exp_f16 v5.l, null
 v_exp_f16 v5.l, -1
 // GFX11: v_exp_f16_e32 v5.l, -1                  ; encoding: [0xc1,0xb0,0x0a,0x7e]
 
-v_exp_f16 v127.l, 0.5
-// GFX11: v_exp_f16_e32 v127.l, 0.5               ; encoding: [0xf0,0xb0,0xfe,0x7e]
+v_exp_f16 v5.l, 0.5
+// GFX11: v_exp_f16_e32 v5.l, 0.5                 ; encoding: [0xf0,0xb0,0x0a,0x7e]
+
+v_exp_f16 v5.l, src_scc
+// GFX11: v_exp_f16_e32 v5.l, src_scc             ; encoding: [0xfd,0xb0,0x0a,0x7e]
+
+v_exp_f16 v5.l, 0xfe0b
+// GFX11: v_exp_f16_e32 v5.l, 0xfe0b              ; encoding: [0xff,0xb0,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_exp_f16 v5.h, src_scc
 // GFX11: v_exp_f16_e32 v5.h, src_scc             ; encoding: [0xfd,0xb0,0x0a,0x7f]
@@ -2033,8 +2259,14 @@ v_floor_f16 v5.l, null
 v_floor_f16 v5.l, -1
 // GFX11: v_floor_f16_e32 v5.l, -1                ; encoding: [0xc1,0xb6,0x0a,0x7e]
 
-v_floor_f16 v127.l, 0.5
-// GFX11: v_floor_f16_e32 v127.l, 0.5             ; encoding: [0xf0,0xb6,0xfe,0x7e]
+v_floor_f16 v5.l, 0.5
+// GFX11: v_floor_f16_e32 v5.l, 0.5               ; encoding: [0xf0,0xb6,0x0a,0x7e]
+
+v_floor_f16 v5.l, src_scc
+// GFX11: v_floor_f16_e32 v5.l, src_scc           ; encoding: [0xfd,0xb6,0x0a,0x7e]
+
+v_floor_f16 v5.l, 0xfe0b
+// GFX11: v_floor_f16_e32 v5.l, 0xfe0b            ; encoding: [0xff,0xb6,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_floor_f16 v5.h, src_scc
 // GFX11: v_floor_f16_e32 v5.h, src_scc           ; encoding: [0xfd,0xb6,0x0a,0x7f]
@@ -2129,6 +2361,12 @@ v_fract_f16 v5.l, v1.l
 v_fract_f16 v5.l, v127.l
 // GFX11: v_fract_f16_e32 v5.l, v127.l            ; encoding: [0x7f,0xbf,0x0a,0x7e]
 
+v_fract_f16 v5.l, v1.h
+// GFX11: v_fract_f16_e32 v5.l, v1.h              ; encoding: [0x81,0xbf,0x0a,0x7e]
+
+v_fract_f16 v5.l, v127.h
+// GFX11: v_fract_f16_e32 v5.l, v127.h            ; encoding: [0xff,0xbf,0x0a,0x7e]
+
 v_fract_f16 v5.l, s1
 // GFX11: v_fract_f16_e32 v5.l, s1                ; encoding: [0x01,0xbe,0x0a,0x7e]
 
@@ -2165,17 +2403,8 @@ v_fract_f16 v5.l, 0.5
 v_fract_f16 v5.l, src_scc
 // GFX11: v_fract_f16_e32 v5.l, src_scc           ; encoding: [0xfd,0xbe,0x0a,0x7e]
 
-v_fract_f16 v127.l, 0xfe0b
-// GFX11: v_fract_f16_e32 v127.l, 0xfe0b          ; encoding: [0xff,0xbe,0xfe,0x7e,0x0b,0xfe,0x00,0x00]
-
-v_fract_f16 v5.l, v1.h
-// GFX11: v_fract_f16_e32 v5.l, v1.h              ; encoding: [0x81,0xbf,0x0a,0x7e]
-
-v_fract_f16 v5.l, v127.h
-// GFX11: v_fract_f16_e32 v5.l, v127.h            ; encoding: [0xff,0xbf,0x0a,0x7e]
-
-v_fract_f16 v127.l, 0.5
-// GFX11: v_fract_f16_e32 v127.l, 0.5             ; encoding: [0xf0,0xbe,0xfe,0x7e]
+v_fract_f16 v5.l, 0xfe0b
+// GFX11: v_fract_f16_e32 v5.l, 0xfe0b            ; encoding: [0xff,0xbe,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_fract_f16 v5.h, src_scc
 // GFX11: v_fract_f16_e32 v5.h, src_scc           ; encoding: [0xfd,0xbe,0x0a,0x7f]
@@ -2306,8 +2535,14 @@ v_frexp_exp_i16_f16 v5.l, null
 v_frexp_exp_i16_f16 v5.l, -1
 // GFX11: v_frexp_exp_i16_f16_e32 v5.l, -1        ; encoding: [0xc1,0xb4,0x0a,0x7e]
 
-v_frexp_exp_i16_f16 v127.l, 0.5
-// GFX11: v_frexp_exp_i16_f16_e32 v127.l, 0.5     ; encoding: [0xf0,0xb4,0xfe,0x7e]
+v_frexp_exp_i16_f16 v5.l, 0.5
+// GFX11: v_frexp_exp_i16_f16_e32 v5.l, 0.5       ; encoding: [0xf0,0xb4,0x0a,0x7e]
+
+v_frexp_exp_i16_f16 v5.l, src_scc
+// GFX11: v_frexp_exp_i16_f16_e32 v5.l, src_scc   ; encoding: [0xfd,0xb4,0x0a,0x7e]
+
+v_frexp_exp_i16_f16 v5.l, 0xfe0b
+// GFX11: v_frexp_exp_i16_f16_e32 v5.l, 0xfe0b    ; encoding: [0xff,0xb4,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_frexp_exp_i16_f16 v5.h, src_scc
 // GFX11: v_frexp_exp_i16_f16_e32 v5.h, src_scc   ; encoding: [0xfd,0xb4,0x0a,0x7f]
@@ -2402,6 +2637,12 @@ v_frexp_mant_f16 v5.l, v1.l
 v_frexp_mant_f16 v5.l, v127.l
 // GFX11: v_frexp_mant_f16_e32 v5.l, v127.l       ; encoding: [0x7f,0xb3,0x0a,0x7e]
 
+v_frexp_mant_f16 v5.l, v1.h
+// GFX11: v_frexp_mant_f16_e32 v5.l, v1.h         ; encoding: [0x81,0xb3,0x0a,0x7e]
+
+v_frexp_mant_f16 v5.l, v127.h
+// GFX11: v_frexp_mant_f16_e32 v5.l, v127.h       ; encoding: [0xff,0xb3,0x0a,0x7e]
+
 v_frexp_mant_f16 v5.l, s1
 // GFX11: v_frexp_mant_f16_e32 v5.l, s1           ; encoding: [0x01,0xb2,0x0a,0x7e]
 
@@ -2438,17 +2679,8 @@ v_frexp_mant_f16 v5.l, 0.5
 v_frexp_mant_f16 v5.l, src_scc
 // GFX11: v_frexp_mant_f16_e32 v5.l, src_scc      ; encoding: [0xfd,0xb2,0x0a,0x7e]
 
-v_frexp_mant_f16 v127.l, 0xfe0b
-// GFX11: v_frexp_mant_f16_e32 v127.l, 0xfe0b     ; encoding: [0xff,0xb2,0xfe,0x7e,0x0b,0xfe,0x00,0x00]
-
-v_frexp_mant_f16 v5.l, v1.h
-// GFX11: v_frexp_mant_f16_e32 v5.l, v1.h         ; encoding: [0x81,0xb3,0x0a,0x7e]
-
-v_frexp_mant_f16 v5.l, v127.h
-// GFX11: v_frexp_mant_f16_e32 v5.l, v127.h       ; encoding: [0xff,0xb3,0x0a,0x7e]
-
-v_frexp_mant_f16 v127.l, 0.5
-// GFX11: v_frexp_mant_f16_e32 v127.l, 0.5        ; encoding: [0xf0,0xb2,0xfe,0x7e]
+v_frexp_mant_f16 v5.l, 0xfe0b
+// GFX11: v_frexp_mant_f16_e32 v5.l, 0xfe0b       ; encoding: [0xff,0xb2,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_frexp_mant_f16 v5.h, src_scc
 // GFX11: v_frexp_mant_f16_e32 v5.h, src_scc      ; encoding: [0xfd,0xb2,0x0a,0x7f]
@@ -2579,8 +2811,14 @@ v_log_f16 v5.l, null
 v_log_f16 v5.l, -1
 // GFX11: v_log_f16_e32 v5.l, -1                  ; encoding: [0xc1,0xae,0x0a,0x7e]
 
-v_log_f16 v127.l, 0.5
-// GFX11: v_log_f16_e32 v127.l, 0.5               ; encoding: [0xf0,0xae,0xfe,0x7e]
+v_log_f16 v5.l, 0.5
+// GFX11: v_log_f16_e32 v5.l, 0.5                 ; encoding: [0xf0,0xae,0x0a,0x7e]
+
+v_log_f16 v5.l, src_scc
+// GFX11: v_log_f16_e32 v5.l, src_scc             ; encoding: [0xfd,0xae,0x0a,0x7e]
+
+v_log_f16 v5.l, 0xfe0b
+// GFX11: v_log_f16_e32 v5.l, 0xfe0b              ; encoding: [0xff,0xae,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_log_f16 v5.h, src_scc
 // GFX11: v_log_f16_e32 v5.h, src_scc             ; encoding: [0xfd,0xae,0x0a,0x7f]
@@ -2633,35 +2871,119 @@ v_log_f32 v5, src_scc
 v_log_f32 v255, 0xaf123456
 // GFX11: v_log_f32_e32 v255, 0xaf123456          ; encoding: [0xff,0x4e,0xfe,0x7f,0x56,0x34,0x12,0xaf]
 
-v_mov_b16_e32 v0.l, v1.l
-// GFX11: v_mov_b16_e32 v0.l, v1.l                ; encoding: [0x01,0x39,0x00,0x7e]
+v_mov_b16_e32 v5.l, v1.l
+// GFX11: v_mov_b16_e32 v5.l, v1.l                ; encoding: [0x01,0x39,0x0a,0x7e]
+
+v_mov_b16_e32 v5.l, v127.l
+// GFX11: v_mov_b16_e32 v5.l, v127.l              ; encoding: [0x7f,0x39,0x0a,0x7e]
+
+v_mov_b16_e32 v5.l, v1.h
+// GFX11: v_mov_b16_e32 v5.l, v1.h                ; encoding: [0x81,0x39,0x0a,0x7e]
+
+v_mov_b16_e32 v5.l, v127.h
+// GFX11: v_mov_b16_e32 v5.l, v127.h              ; encoding: [0xff,0x39,0x0a,0x7e]
 
-v_mov_b16_e32 v0.l, s1
-// GFX11: v_mov_b16_e32 v0.l, s1                  ; encoding: [0x01,0x38,0x00,0x7e]
+v_mov_b16_e32 v5.l, s1
+// GFX11: v_mov_b16_e32 v5.l, s1                  ; encoding: [0x01,0x38,0x0a,0x7e]
 
-v_mov_b16_e32 v0.h, 0
-// GFX11: v_mov_b16_e32 v0.h, 0                   ; encoding: [0x80,0x38,0x00,0x7f]
+v_mov_b16_e32 v5.l, s105
+// GFX11: v_mov_b16_e32 v5.l, s105                ; encoding: [0x69,0x38,0x0a,0x7e]
 
-v_mov_b16_e32 v0.h, 1.0
-// GFX11: v_mov_b16_e32 v0.h, 1.0                 ; encoding: [0xf2,0x38,0x00,0x7f]
+v_mov_b16_e32 v5.l, vcc_lo
+// GFX11: v_mov_b16_e32 v5.l, vcc_lo              ; encoding: [0x6a,0x38,0x0a,0x7e]
 
-v_mov_b16_e32 v0.l, 0x1234
-// GFX11: v_mov_b16_e32 v0.l, 0x1234              ; encoding: [0xff,0x38,0x00,0x7e,0x34,0x12,0x00,0x00]
+v_mov_b16_e32 v5.l, vcc_hi
+// GFX11: v_mov_b16_e32 v5.l, vcc_hi              ; encoding: [0x6b,0x38,0x0a,0x7e]
 
-v_mov_b16_e64 v0.l, v1.l
-// GFX11: v_mov_b16_e64 v0.l, v1.l                ; encoding: [0x00,0x00,0x9c,0xd5,0x01,0x01,0x00,0x00]
+v_mov_b16_e32 v5.l, ttmp15
+// GFX11: v_mov_b16_e32 v5.l, ttmp15              ; encoding: [0x7b,0x38,0x0a,0x7e]
 
-v_mov_b16_e64 v200.l, v1.h
-// GFX11: v_mov_b16_e64 v200.l, v1.h op_sel:[1,0] ; encoding: [0xc8,0x08,0x9c,0xd5,0x01,0x01,0x00,0x00]
+v_mov_b16_e32 v5.l, m0
+// GFX11: v_mov_b16_e32 v5.l, m0                  ; encoding: [0x7d,0x38,0x0a,0x7e]
 
-v_mov_b16_e64 v0.l, s1
-// GFX11: v_mov_b16_e64 v0.l, s1                  ; encoding: [0x00,0x00,0x9c,0xd5,0x01,0x00,0x00,0x00]
+v_mov_b16_e32 v5.l, exec_lo
+// GFX11: v_mov_b16_e32 v5.l, exec_lo             ; encoding: [0x7e,0x38,0x0a,0x7e]
 
-v_mov_b16_e64 v200.h, 1
-// GFX11: v_mov_b16_e64 v200.h, 1 op_sel:[0,1]    ; encoding: [0xc8,0x40,0x9c,0xd5,0x81,0x00,0x00,0x00]
+v_mov_b16_e32 v5.l, exec_hi
+// GFX11: v_mov_b16_e32 v5.l, exec_hi             ; encoding: [0x7f,0x38,0x0a,0x7e]
 
-v_mov_b16_e64 v0.l, 0x1234
-// GFX11: v_mov_b16_e64 v0.l, 0x1234              ; encoding: [0x00,0x00,0x9c,0xd5,0xff,0x00,0x00,0x00,0x34,0x12,0x00,0x00]
+v_mov_b16_e32 v5.l, null
+// GFX11: v_mov_b16_e32 v5.l, null                ; encoding: [0x7c,0x38,0x0a,0x7e]
+
+v_mov_b16_e32 v5.l, -1
+// GFX11: v_mov_b16_e32 v5.l, -1                  ; encoding: [0xc1,0x38,0x0a,0x7e]
+
+v_mov_b16_e32 v5.l, 0.5
+// GFX11: v_mov_b16_e32 v5.l, 0.5                 ; encoding: [0xf0,0x38,0x0a,0x7e]
+
+v_mov_b16_e32 v5.l, src_scc
+// GFX11: v_mov_b16_e32 v5.l, src_scc             ; encoding: [0xfd,0x38,0x0a,0x7e]
+
+v_mov_b16_e32 v5.l, 0xfe0b
+// GFX11: v_mov_b16_e32 v5.l, 0xfe0b              ; encoding: [0xff,0x38,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
+
+v_mov_b16_e32 v5.h, src_scc
+// GFX11: v_mov_b16_e32 v5.h, src_scc             ; encoding: [0xfd,0x38,0x0a,0x7f]
+
+v_mov_b16_e32 v127.h, 0xfe0b
+// GFX11: v_mov_b16_e32 v127.h, 0xfe0b            ; encoding: [0xff,0x38,0xfe,0x7f,0x0b,0xfe,0x00,0x00]
+
+v_mov_b16_e64 v5.l, v1.l
+// GFX11: v_mov_b16_e64 v5.l, v1.l                ; encoding: [0x05,0x00,0x9c,0xd5,0x01,0x01,0x00,0x00]
+
+v_mov_b16_e64 v5.l, v127.l
+// GFX11: v_mov_b16_e64 v5.l, v127.l              ; encoding: [0x05,0x00,0x9c,0xd5,0x7f,0x01,0x00,0x00]
+
+v_mov_b16_e64 v5.l, v1.h
+// GFX11: v_mov_b16_e64 v5.l, v1.h op_sel:[1,0]   ; encoding: [0x05,0x08,0x9c,0xd5,0x01,0x01,0x00,0x00]
+
+v_mov_b16_e64 v5.l, v127.h
+// GFX11: v_mov_b16_e64 v5.l, v127.h op_sel:[1,0] ; encoding: [0x05,0x08,0x9c,0xd5,0x7f,0x01,0x00,0x00]
+
+v_mov_b16_e64 v5.l, s1
+// GFX11: v_mov_b16_e64 v5.l, s1                  ; encoding: [0x05,0x00,0x9c,0xd5,0x01,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, s105
+// GFX11: v_mov_b16_e64 v5.l, s105                ; encoding: [0x05,0x00,0x9c,0xd5,0x69,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, vcc_lo
+// GFX11: v_mov_b16_e64 v5.l, vcc_lo              ; encoding: [0x05,0x00,0x9c,0xd5,0x6a,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, vcc_hi
+// GFX11: v_mov_b16_e64 v5.l, vcc_hi              ; encoding: [0x05,0x00,0x9c,0xd5,0x6b,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, ttmp15
+// GFX11: v_mov_b16_e64 v5.l, ttmp15              ; encoding: [0x05,0x00,0x9c,0xd5,0x7b,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, m0
+// GFX11: v_mov_b16_e64 v5.l, m0                  ; encoding: [0x05,0x00,0x9c,0xd5,0x7d,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, exec_lo
+// GFX11: v_mov_b16_e64 v5.l, exec_lo             ; encoding: [0x05,0x00,0x9c,0xd5,0x7e,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, exec_hi
+// GFX11: v_mov_b16_e64 v5.l, exec_hi             ; encoding: [0x05,0x00,0x9c,0xd5,0x7f,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, null
+// GFX11: v_mov_b16_e64 v5.l, null                ; encoding: [0x05,0x00,0x9c,0xd5,0x7c,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, -1
+// GFX11: v_mov_b16_e64 v5.l, -1                  ; encoding: [0x05,0x00,0x9c,0xd5,0xc1,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, 0.5
+// GFX11: v_mov_b16_e64 v5.l, 0.5                 ; encoding: [0x05,0x00,0x9c,0xd5,0xf0,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, src_scc
+// GFX11: v_mov_b16_e64 v5.l, src_scc             ; encoding: [0x05,0x00,0x9c,0xd5,0xfd,0x00,0x00,0x00]
+
+v_mov_b16_e64 v5.l, 0xfe0b
+// GFX11: v_mov_b16_e64 v5.l, 0xfe0b              ; encoding: [0x05,0x00,0x9c,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00]
+
+v_mov_b16_e64 v5.h, src_scc
+// GFX11: v_mov_b16_e64 v5.h, src_scc op_sel:[0,1] ; encoding: [0x05,0x40,0x9c,0xd5,0xfd,0x00,0x00,0x00]
+
+v_mov_b16_e64 v127.h, 0xfe0b
+// GFX11: v_mov_b16_e64 v127.h, 0xfe0b op_sel:[0,1] ; encoding: [0x7f,0x40,0x9c,0xd5,0xff,0x00,0x00,0x00,0x0b,0xfe,0x00,0x00]
 
 v_mov_b32 v5, v1
 // GFX11: v_mov_b32_e32 v5, v1                    ; encoding: [0x01,0x03,0x0a,0x7e]
@@ -2780,6 +3102,12 @@ v_not_b16 v5.l, v1.l
 v_not_b16 v5.l, v127.l
 // GFX11: v_not_b16_e32 v5.l, v127.l              ; encoding: [0x7f,0xd3,0x0a,0x7e]
 
+v_not_b16 v5.l, v1.h
+// GFX11: v_not_b16_e32 v5.l, v1.h                ; encoding: [0x81,0xd3,0x0a,0x7e]
+
+v_not_b16 v5.l, v127.h
+// GFX11: v_not_b16_e32 v5.l, v127.h              ; encoding: [0xff,0xd3,0x0a,0x7e]
+
 v_not_b16 v5.l, s1
 // GFX11: v_not_b16_e32 v5.l, s1                  ; encoding: [0x01,0xd2,0x0a,0x7e]
 
@@ -2816,17 +3144,8 @@ v_not_b16 v5.l, 0.5
 v_not_b16 v5.l, src_scc
 // GFX11: v_not_b16_e32 v5.l, src_scc             ; encoding: [0xfd,0xd2,0x0a,0x7e]
 
-v_not_b16 v127.l, 0xfe0b
-// GFX11: v_not_b16_e32 v127.l, 0xfe0b            ; encoding: [0xff,0xd2,0xfe,0x7e,0x0b,0xfe,0x00,0x00]
-
-v_not_b16 v5.l, v1.h
-// GFX11: v_not_b16_e32 v5.l, v1.h                ; encoding: [0x81,0xd3,0x0a,0x7e]
-
-v_not_b16 v5.l, v127.h
-// GFX11: v_not_b16_e32 v5.l, v127.h              ; encoding: [0xff,0xd3,0x0a,0x7e]
-
-v_not_b16 v127.l, 0.5
-// GFX11: v_not_b16_e32 v127.l, 0.5               ; encoding: [0xf0,0xd2,0xfe,0x7e]
+v_not_b16 v5.l, 0xfe0b
+// GFX11: v_not_b16_e32 v5.l, 0xfe0b              ; encoding: [0xff,0xd2,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_not_b16 v5.h, src_scc
 // GFX11: v_not_b16_e32 v5.h, src_scc             ; encoding: [0xfd,0xd2,0x0a,0x7f]
@@ -2930,8 +3249,14 @@ v_rcp_f16 v5.l, null
 v_rcp_f16 v5.l, -1
 // GFX11: v_rcp_f16_e32 v5.l, -1                  ; encoding: [0xc1,0xa8,0x0a,0x7e]
 
-v_rcp_f16 v127.l, 0.5
-// GFX11: v_rcp_f16_e32 v127.l, 0.5               ; encoding: [0xf0,0xa8,0xfe,0x7e]
+v_rcp_f16 v5.l, 0.5
+// GFX11: v_rcp_f16_e32 v5.l, 0.5                 ; encoding: [0xf0,0xa8,0x0a,0x7e]
+
+v_rcp_f16 v5.l, src_scc
+// GFX11: v_rcp_f16_e32 v5.l, src_scc             ; encoding: [0xfd,0xa8,0x0a,0x7e]
+
+v_rcp_f16 v5.l, 0xfe0b
+// GFX11: v_rcp_f16_e32 v5.l, 0xfe0b              ; encoding: [0xff,0xa8,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_rcp_f16 v5.h, src_scc
 // GFX11: v_rcp_f16_e32 v5.h, src_scc             ; encoding: [0xfd,0xa8,0x0a,0x7f]
@@ -3089,6 +3414,12 @@ v_rndne_f16 v5.l, v1.l
 v_rndne_f16 v5.l, v127.l
 // GFX11: v_rndne_f16_e32 v5.l, v127.l            ; encoding: [0x7f,0xbd,0x0a,0x7e]
 
+v_rndne_f16 v5.l, v1.h
+// GFX11: v_rndne_f16_e32 v5.l, v1.h              ; encoding: [0x81,0xbd,0x0a,0x7e]
+
+v_rndne_f16 v5.l, v127.h
+// GFX11: v_rndne_f16_e32 v5.l, v127.h            ; encoding: [0xff,0xbd,0x0a,0x7e]
+
 v_rndne_f16 v5.l, s1
 // GFX11: v_rndne_f16_e32 v5.l, s1                ; encoding: [0x01,0xbc,0x0a,0x7e]
 
@@ -3125,17 +3456,8 @@ v_rndne_f16 v5.l, 0.5
 v_rndne_f16 v5.l, src_scc
 // GFX11: v_rndne_f16_e32 v5.l, src_scc           ; encoding: [0xfd,0xbc,0x0a,0x7e]
 
-v_rndne_f16 v127.l, 0xfe0b
-// GFX11: v_rndne_f16_e32 v127.l, 0xfe0b          ; encoding: [0xff,0xbc,0xfe,0x7e,0x0b,0xfe,0x00,0x00]
-
-v_rndne_f16 v5.l, v1.h
-// GFX11: v_rndne_f16_e32 v5.l, v1.h              ; encoding: [0x81,0xbd,0x0a,0x7e]
-
-v_rndne_f16 v5.l, v127.h
-// GFX11: v_rndne_f16_e32 v5.l, v127.h            ; encoding: [0xff,0xbd,0x0a,0x7e]
-
-v_rndne_f16 v127.l, 0.5
-// GFX11: v_rndne_f16_e32 v127.l, 0.5             ; encoding: [0xf0,0xbc,0xfe,0x7e]
+v_rndne_f16 v5.l, 0xfe0b
+// GFX11: v_rndne_f16_e32 v5.l, 0xfe0b            ; encoding: [0xff,0xbc,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_rndne_f16 v5.h, src_scc
 // GFX11: v_rndne_f16_e32 v5.h, src_scc           ; encoding: [0xfd,0xbc,0x0a,0x7f]
@@ -3266,8 +3588,14 @@ v_rsq_f16 v5.l, null
 v_rsq_f16 v5.l, -1
 // GFX11: v_rsq_f16_e32 v5.l, -1                  ; encoding: [0xc1,0xac,0x0a,0x7e]
 
-v_rsq_f16 v127.l, 0.5
-// GFX11: v_rsq_f16_e32 v127.l, 0.5               ; encoding: [0xf0,0xac,0xfe,0x7e]
+v_rsq_f16 v5.l, 0.5
+// GFX11: v_rsq_f16_e32 v5.l, 0.5                 ; encoding: [0xf0,0xac,0x0a,0x7e]
+
+v_rsq_f16 v5.l, src_scc
+// GFX11: v_rsq_f16_e32 v5.l, src_scc             ; encoding: [0xfd,0xac,0x0a,0x7e]
+
+v_rsq_f16 v5.l, 0xfe0b
+// GFX11: v_rsq_f16_e32 v5.l, 0xfe0b              ; encoding: [0xff,0xac,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_rsq_f16 v5.h, src_scc
 // GFX11: v_rsq_f16_e32 v5.h, src_scc             ; encoding: [0xfd,0xac,0x0a,0x7f]
@@ -3416,6 +3744,12 @@ v_sin_f16 v5.l, v1.l
 v_sin_f16 v5.l, v127.l
 // GFX11: v_sin_f16_e32 v5.l, v127.l              ; encoding: [0x7f,0xc1,0x0a,0x7e]
 
+v_sin_f16 v5.l, v1.h
+// GFX11: v_sin_f16_e32 v5.l, v1.h                ; encoding: [0x81,0xc1,0x0a,0x7e]
+
+v_sin_f16 v5.l, v127.h
+// GFX11: v_sin_f16_e32 v5.l, v127.h              ; encoding: [0xff,0xc1,0x0a,0x7e]
+
 v_sin_f16 v5.l, s1
 // GFX11: v_sin_f16_e32 v5.l, s1                  ; encoding: [0x01,0xc0,0x0a,0x7e]
 
@@ -3452,17 +3786,8 @@ v_sin_f16 v5.l, 0.5
 v_sin_f16 v5.l, src_scc
 // GFX11: v_sin_f16_e32 v5.l, src_scc             ; encoding: [0xfd,0xc0,0x0a,0x7e]
 
-v_sin_f16 v127.l, 0xfe0b
-// GFX11: v_sin_f16_e32 v127.l, 0xfe0b            ; encoding: [0xff,0xc0,0xfe,0x7e,0x0b,0xfe,0x00,0x00]
-
-v_sin_f16 v5.l, v1.h
-// GFX11: v_sin_f16_e32 v5.l, v1.h                ; encoding: [0x81,0xc1,0x0a,0x7e]
-
-v_sin_f16 v5.l, v127.h
-// GFX11: v_sin_f16_e32 v5.l, v127.h              ; encoding: [0xff,0xc1,0x0a,0x7e]
-
-v_sin_f16 v127.l, 0.5
-// GFX11: v_sin_f16_e32 v127.l, 0.5               ; encoding: [0xf0,0xc0,0xfe,0x7e]
+v_sin_f16 v5.l, 0xfe0b
+// GFX11: v_sin_f16_e32 v5.l, 0xfe0b              ; encoding: [0xff,0xc0,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_sin_f16 v5.h, src_scc
 // GFX11: v_sin_f16_e32 v5.h, src_scc             ; encoding: [0xfd,0xc0,0x0a,0x7f]
@@ -3557,8 +3882,14 @@ v_sqrt_f16 v5.l, null
 v_sqrt_f16 v5.l, -1
 // GFX11: v_sqrt_f16_e32 v5.l, -1                 ; encoding: [0xc1,0xaa,0x0a,0x7e]
 
-v_sqrt_f16 v127.l, 0.5
-// GFX11: v_sqrt_f16_e32 v127.l, 0.5              ; encoding: [0xf0,0xaa,0xfe,0x7e]
+v_sqrt_f16 v5.l, 0.5
+// GFX11: v_sqrt_f16_e32 v5.l, 0.5                ; encoding: [0xf0,0xaa,0x0a,0x7e]
+
+v_sqrt_f16 v5.l, src_scc
+// GFX11: v_sqrt_f16_e32 v5.l, src_scc            ; encoding: [0xfd,0xaa,0x0a,0x7e]
+
+v_sqrt_f16 v5.l, 0xfe0b
+// GFX11: v_sqrt_f16_e32 v5.l, 0xfe0b             ; encoding: [0xff,0xaa,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_sqrt_f16 v5.h, src_scc
 // GFX11: v_sqrt_f16_e32 v5.h, src_scc            ; encoding: [0xfd,0xaa,0x0a,0x7f]
@@ -3674,6 +4005,12 @@ v_trunc_f16 v5.l, v1.l
 v_trunc_f16 v5.l, v127.l
 // GFX11: v_trunc_f16_e32 v5.l, v127.l            ; encoding: [0x7f,0xbb,0x0a,0x7e]
 
+v_trunc_f16 v5.l, v1.h
+// GFX11: v_trunc_f16_e32 v5.l, v1.h              ; encoding: [0x81,0xbb,0x0a,0x7e]
+
+v_trunc_f16 v5.l, v127.h
+// GFX11: v_trunc_f16_e32 v5.l, v127.h            ; encoding: [0xff,0xbb,0x0a,0x7e]
+
 v_trunc_f16 v5.l, s1
 // GFX11: v_trunc_f16_e32 v5.l, s1                ; encoding: [0x01,0xba,0x0a,0x7e]
 
@@ -3710,17 +4047,8 @@ v_trunc_f16 v5.l, 0.5
 v_trunc_f16 v5.l, src_scc
 // GFX11: v_trunc_f16_e32 v5.l, src_scc           ; encoding: [0xfd,0xba,0x0a,0x7e]
 
-v_trunc_f16 v127.l, 0xfe0b
-// GFX11: v_trunc_f16_e32 v127.l, 0xfe0b          ; encoding: [0xff,0xba,0xfe,0x7e,0x0b,0xfe,0x00,0x00]
-
-v_trunc_f16 v5.l, v1.h
-// GFX11: v_trunc_f16_e32 v5.l, v1.h              ; encoding: [0x81,0xbb,0x0a,0x7e]
-
-v_trunc_f16 v5.l, v127.h
-// GFX11: v_trunc_f16_e32 v5.l, v127.h            ; encoding: [0xff,0xbb,0x0a,0x7e]
-
-v_trunc_f16 v127.l, 0.5
-// GFX11: v_trunc_f16_e32 v127.l, 0.5             ; encoding: [0xf0,0xba,0xfe,0x7e]
+v_trunc_f16 v5.l, 0xfe0b
+// GFX11: v_trunc_f16_e32 v5.l, 0xfe0b            ; encoding: [0xff,0xba,0x0a,0x7e,0x0b,0xfe,0x00,0x00]
 
 v_trunc_f16 v5.h, src_scc
 // GFX11: v_trunc_f16_e32 v5.h, src_scc           ; encoding: [0xfd,0xba,0x0a,0x7f]
@@ -3808,9 +4136,3 @@ v_trunc_f64 v[5:6], src_scc
 
 v_trunc_f64 v[254:255], 0xaf123456
 // GFX11: v_trunc_f64_e32 v[254:255], 0xaf123456  ; encoding: [0xff,0x2e,0xfc,0x7f,0x56,0x34,0x12,0xaf]
-
-v_trunc_f16 v[5].l, v[1].h
-// GFX11: v_trunc_f16_e32 v5.l, v1.h              ; encoding: [0x81,0xbb,0x0a,0x7e]
-
-v_trunc_f16 v[5:5].l, v[1:1].h
-// GFX11: v_trunc_f16_e32 v5.l, v1.h              ; encoding: [0x81,0xbb,0x0a,0x7e]
diff --git a/llvm/utils/update_mc_test_checks.py b/llvm/utils/update_mc_test_checks.py
index 363278d1b1f97..d569d2a70e5d5 100755
--- a/llvm/utils/update_mc_test_checks.py
+++ b/llvm/utils/update_mc_test_checks.py
@@ -29,6 +29,11 @@
 ]
 
 
+class Error(Exception):
+    def __init__(self, test_info, line_no, msg):
+        super().__init__(f"{test_info.path}:{line_no}: {msg}")
+
+
 def invoke_tool(exe, check_rc, cmd_args, testline, verbose=False):
     substs = SUBSTITUTIONS + [(t, exe) for t in mc_LIKE_TOOLS]
     args = [common.applySubstitutions(cmd, substs) for cmd in cmd_args.split("|")]
@@ -125,6 +130,62 @@ def getErrCheckLine(prefix, output, mc_mode, line_offset=1):
     )
 
 
+def parse_token_defs(test_info):
+    tokens = {}
+    current_token = None
+    for line_no, line in enumerate(test_info.input_lines, start=1):
+        # Remove comments.
+        line = line.split("#")[0].rstrip()
+
+        # Skip everything up to the instructions definition.
+        if not tokens and not current_token and line != "//  INSTS=":
+            continue
+
+        if not line.startswith("//"):
+            break
+
+        original_len = len(line)
+        line = line[2:].lstrip(" ")
+        indent = original_len - len(line)
+
+        if not line:
+            current_token = None
+            continue
+
+        # Define a new token.
+        if not current_token:
+            if indent != 4 or not line.endswith("="):
+                raise Error(test_info, line_no, "token definition expected")
+
+            current_token = line[:-1].strip()
+            if current_token in tokens:
+                raise Error(test_info, line_no, f"'{current_token}' redefined")
+
+            tokens[current_token] = []
+            continue
+
+        # Add token value.
+        if indent != 8:
+            raise Error(test_info, line_no, "wrong indentation for token value")
+
+        tokens[current_token].append(line)
+
+    return tokens
+
+
+def expand_insts(tokens):
+    def subst(s):
+        for token, values in tokens.items():
+            if token in s:
+                for value in values:
+                    yield from subst(s.replace(token, value, 1))
+                return
+
+        yield s
+
+    yield from subst("INSTS")
+
+
 def update_test(ti: common.TestInfo):
     if ti.path.endswith(".s"):
         mc_mode = "asm"
@@ -209,6 +270,14 @@ def update_test(ti: common.TestInfo):
     testlines = list(dict.fromkeys(testlines))
     common.debug("Valid test line found: ", len(testlines))
 
+    # Where instruction templates are specified, use them instead.
+    regenerate = False
+    if mc_mode == "asm":
+        tokens = parse_token_defs(ti)
+        if "INSTS" in tokens:
+            testlines = list(expand_insts(tokens))
+            regenerate = True
+
     raw_output = []
     raw_prefixes = []
     for (
@@ -244,7 +313,6 @@ def update_test(ti: common.TestInfo):
 
         raw_prefixes.append(prefixes)
 
-    output_lines = []
     generated_prefixes = {}
     sort_keys = {}
     used_prefixes = set()
@@ -321,14 +389,32 @@ def update_test(ti: common.TestInfo):
         generated_prefixes[input_line] = "\n".join(check_lines)
 
     # write output
-    for input_info in ti.iterlines(output_lines):
-        input_line = input_info.line
-        if input_line in testlines:
-            output_lines.append(input_line)
-            output_lines.append(generated_prefixes[input_line])
-
-        elif should_add_line_to_output(input_line, prefix_set, mc_mode):
-            output_lines.append(input_line)
+    output_lines = []
+    if regenerate:
+        # Keep all leading comments and empty lines.
+        for input_info in ti.iterlines(output_lines):
+            input_line = input_info.line
+            if not input_line or input_line.startswith(COMMENT[mc_mode]):
+                output_lines.append(input_line)
+                continue
+            break
+
+        # Remove tail empty lines.
+        while not output_lines[-1]:
+            del output_lines[-1]
+
+        # Emit test and check lines.
+        for input_line in testlines:
+            output_lines.extend(["", input_line, generated_prefixes[input_line]])
+    else:
+        for input_info in ti.iterlines(output_lines):
+            input_line = input_info.line
+            if input_line in testlines:
+                output_lines.append(input_line)
+                output_lines.append(generated_prefixes[input_line])
+
+            elif should_add_line_to_output(input_line, prefix_set, mc_mode):
+                output_lines.append(input_line)
 
     if ti.args.unique or ti.args.sort:
         # split with double newlines



More information about the llvm-commits mailing list