[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