Skip to content

Conversation

@kosarev
Copy link
Collaborator

@kosarev kosarev commented Nov 20, 2025

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

Copy link
Collaborator Author

kosarev commented Nov 20, 2025

This stack of pull requests is managed by Graphite. Learn more about stacking.

@kosarev kosarev marked this pull request as ready for review November 20, 2025 21:05
@llvmbot
Copy link
Member

llvmbot commented Nov 20, 2025

@llvm/pr-subscribers-testing-tools

@llvm/pr-subscribers-backend-amdgpu

Author: Ivan Kosarev (kosarev)

Changes

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


Patch is 38.52 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/168946.diff

2 Files Affected:

  • (modified) llvm/test/MC/AMDGPU/gfx11_asm_vop1.s (+472-150)
  • (modified) llvm/utils/update_mc_test_checks.py (+95-9)
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,...
[truncated]

@github-actions
Copy link

github-actions bot commented Nov 20, 2025

🐧 Linux x64 Test Results

  • 186510 tests passed
  • 4877 tests skipped

Copy link
Contributor

@arsenm arsenm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Title is for wrong script

@kosarev kosarev force-pushed the users/kosarev/generate-asm-tests branch from 600917e to 1bc592e Compare November 21, 2025 11:27
@kosarev kosarev changed the title [Utils][update_llc_test_checks] Support generating asm tests from templates. [Utils][update_mc_test_checks] Support generating asm tests from templates. Nov 21, 2025
Copy link
Contributor

@Sisyph Sisyph left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm VERY happy to see this functionality.

Perhaps you should add one of these templated tests to the unit tests for the script to monitor for regressions?

It could conceivably be abstracted even more, with an auxilliary file to provide common operand templates or so, but this is a good place to start.

LGTM, but please wait for one more.

common.debug("Valid test line found: ", len(testlines))

# Where instruction templates are specified, use them instead.
regenerate = False
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: I'd probably call the flag use_asm_templates instead of regenerate. At least I don't understand what regenerate means in this context.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Copy link
Contributor

@broxigarchen broxigarchen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Except we need to add some a few test cases in the script test folder.

Btw, does this "regenerate from template" feature remove the existing test lines?

…lates.

Reduces the pain of manual editing tests applying the same
changes over multiple instructions and keeping them consistent.
@kosarev kosarev force-pushed the users/kosarev/generate-asm-tests branch from 1bc592e to 95f7ec5 Compare November 24, 2025 12:51
Copy link
Collaborator Author

@kosarev kosarev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a test.

There are obviously lots of things about this that will likely need more work, such as maybe expanding tokens beginning the longest ones, for one example. I intentionally postpone addressing them until later, when we have a better idea on what it's like to use templates in practice.

Btw, does this "regenerate from template" feature remove the existing test lines?

Yes, the idea is that where templates are used, they work as the single source of input, meaning the reader should never need to consult the rest of the file. Doing otherwise would undermine the idea of having templates as a comprehensible but true version of the test.

common.debug("Valid test line found: ", len(testlines))

# Where instruction templates are specified, use them instead.
regenerate = False
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@kosarev kosarev merged commit 83765f4 into main Nov 24, 2025
10 checks passed
@kosarev kosarev deleted the users/kosarev/generate-asm-tests branch November 24, 2025 13:38
aadeshps-mcw pushed a commit to aadeshps-mcw/llvm-project that referenced this pull request Nov 26, 2025
…lates. (llvm#168946)

Reduces the pain of manual editing tests applying the same
changes over multiple instructions and keeping them consistent.
Priyanshu3820 pushed a commit to Priyanshu3820/llvm-project that referenced this pull request Nov 26, 2025
…lates. (llvm#168946)

Reduces the pain of manual editing tests applying the same
changes over multiple instructions and keeping them consistent.
augusto2112 pushed a commit to augusto2112/llvm-project that referenced this pull request Dec 3, 2025
…lates. (llvm#168946)

Reduces the pain of manual editing tests applying the same
changes over multiple instructions and keeping them consistent.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants