[llvm] [AMDGPU] Add negative tests for register aignment for tensor load/store, NFC (PR #182358)
Changpeng Fang via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 19 12:22:17 PST 2026
https://github.com/changpeng updated https://github.com/llvm/llvm-project/pull/182358
>From 01eb97823e8168afdd319a40240480fe5b67add3 Mon Sep 17 00:00:00 2001
From: Changpeng Fang <changpeng.fang at amd.com>
Date: Thu, 19 Feb 2026 11:57:58 -0800
Subject: [PATCH 1/2] [AMDGPU] Add negative tests for register aignment for
tensor load/store
Also auto generates checks.
---
llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s | 101 +++++++++++--------
1 file changed, 57 insertions(+), 44 deletions(-)
diff --git a/llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s b/llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s
index d0d6f0e5fee5f..2f911ae79c00f 100644
--- a/llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s
+++ b/llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s
@@ -1,85 +1,98 @@
+// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
; RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1250 -filetype=null %s 2>&1 | FileCheck --check-prefix=GFX1250-ERR --implicit-check-not=error: --strict-whitespace %s
tensor_load_to_lds s[0:3], s[4:11] r128
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must set modifier r128=0
+// GFX1250-ERR: :[[@LINE-1]]:1: error: instruction must set modifier r128=0
tensor_load_to_lds s[0:3], s[4:11] th:TH_STORE_BYPASS scope:SCOPE_SYS
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid th value for load instructions
+// GFX1250-ERR: :[[@LINE-1]]:36: error: invalid th value for load instructions
tensor_load_to_lds s[0:3], s[4:11], s[12:15], s[16:19] r128
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must set modifier r128=0
+// GFX1250-ERR: :[[@LINE-1]]:1: error: instruction must set modifier r128=0
tensor_load_to_lds s[0:3], s[4:11], s[12:15], s[16:19] th:TH_STORE_NT_HT scope:SCOPE_DEV
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid th value for load instructions
+// GFX1250-ERR: :[[@LINE-1]]:56: error: invalid th value for load instructions
tensor_store_from_lds s[0:3], s[4:11] r128
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must set modifier r128=0
+// GFX1250-ERR: :[[@LINE-1]]:1: error: instruction must set modifier r128=0
tensor_store_from_lds s[0:3], s[4:11] th:TH_LOAD_BYPASS scope:SCOPE_SYS
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid th value for store instructions
+// GFX1250-ERR: :[[@LINE-1]]:39: error: invalid th value for store instructions
tensor_store_from_lds s[0:3], s[4:11], s[12:15], s[16:19] r128
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must set modifier r128=0
+// GFX1250-ERR: :[[@LINE-1]]:1: error: instruction must set modifier r128=0
tensor_store_from_lds s[0:3], s[4:11], s[12:15], s[16:19] th:TH_LOAD_NT_HT scope:SCOPE_DEV
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid th value for store instructions
+// GFX1250-ERR: :[[@LINE-1]]:59: error: invalid th value for store instructions
tensor_load_to_lds null, s[4:11]
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_load_to_lds null, s[4:11]
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:20: error: invalid operand for instruction
tensor_load_to_lds s[0:3], null
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_load_to_lds s[0:3], null
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:28: error: invalid operand for instruction
tensor_load_to_lds null, s[4:11], s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_load_to_lds null, s[4:11], s[12:15], s[16:19]
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:20: error: invalid operand for instruction
tensor_load_to_lds s[0:3], null, s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_load_to_lds s[0:3], null, s[12:15], s[16:19]
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:28: error: invalid operand for instruction
tensor_load_to_lds s[0:3], s[4:11], null, s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_load_to_lds s[0:3], s[4:11], null, s[16:19]
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:37: error: invalid operand for instruction
tensor_load_to_lds s[0:3], s[4:11], s[12:15], null
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_load_to_lds s[0:3], s[4:11], s[12:15], null
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:47: error: invalid operand for instruction
tensor_store_from_lds null, s[4:11]
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_store_from_lds null, s[4:11]
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:23: error: invalid operand for instruction
tensor_store_from_lds s[0:3], null
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_store_from_lds s[0:3], null
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:31: error: invalid operand for instruction
tensor_store_from_lds null, s[4:11], s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_store_from_lds null, s[4:11], s[12:15], s[16:19]
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:23: error: invalid operand for instruction
tensor_store_from_lds s[0:3], null, s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_store_from_lds s[0:3], null, s[12:15], s[16:19]
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:31: error: invalid operand for instruction
tensor_store_from_lds s[0:3], s[4:11], null, s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_store_from_lds s[0:3], s[4:11], null, s[16:19]
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:40: error: invalid operand for instruction
tensor_store_from_lds s[0:3], s[4:11], s[12:15], null
-// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
-// GFX1250-ERR: tensor_store_from_lds s[0:3], s[4:11], s[12:15], null
-// GFX1250-ERR: ^
+// GFX1250-ERR: :[[@LINE-1]]:50: error: invalid operand for instruction
+
+tensor_load_to_lds s[14:17], s[4:11]
+// GFX1250-ERR: :[[@LINE-1]]:20: error: invalid register alignment
+
+tensor_load_to_lds s[0:3], s[6:13]
+// GFX1250-ERR: :[[@LINE-1]]:28: error: invalid register alignment
+
+tensor_load_to_lds s[58:61], s[4:11], s[12:15], s[16:19]
+// GFX1250-ERR: :[[@LINE-1]]:20: error: invalid register alignment
+
+tensor_load_to_lds s[0:3], s[22:29], s[12:15], s[16:19]
+// GFX1250-ERR: :[[@LINE-1]]:28: error: invalid register alignment
+
+tensor_load_to_lds s[0:3], s[4:11], s[58:61], s[16:19]
+// GFX1250-ERR: :[[@LINE-1]]:37: error: invalid register alignment
+
+tensor_load_to_lds s[0:3], s[4:11], s[12:15], s[18:21]
+// GFX1250-ERR: :[[@LINE-1]]:47: error: invalid register alignment
+
+tensor_store_from_lds s[14:17], s[4:11]
+// GFX1250-ERR: :[[@LINE-1]]:23: error: invalid register alignment
+
+tensor_store_from_lds s[0:3], s[6:13]
+// GFX1250-ERR: :[[@LINE-1]]:31: error: invalid register alignment
+
+tensor_store_from_lds s[58:61], s[4:11], s[12:15], s[16:19]
+// GFX1250-ERR: :[[@LINE-1]]:23: error: invalid register alignment
+
+tensor_store_from_lds s[0:3], s[22:29], s[12:15], s[16:19]
+// GFX1250-ERR: :[[@LINE-1]]:31: error: invalid register alignment
+
+tensor_store_from_lds s[0:3], s[4:11], s[58:61], s[16:19]
+// GFX1250-ERR: :[[@LINE-1]]:40: error: invalid register alignment
+
+tensor_store_from_lds s[0:3], s[4:11], s[12:15], s[18:21]
+// GFX1250-ERR: :[[@LINE-1]]:50: error: invalid register alignment
>From f80551cef080c3e2e94b8f9880acab09677a1587 Mon Sep 17 00:00:00 2001
From: Changpeng Fang <changpeng.fang at amd.com>
Date: Thu, 19 Feb 2026 12:21:34 -0800
Subject: [PATCH 2/2] [AMDGPU] Remove auto generate for the test
---
llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s | 89 ++++++++++++--------
1 file changed, 56 insertions(+), 33 deletions(-)
diff --git a/llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s b/llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s
index 2f911ae79c00f..99626c73451ad 100644
--- a/llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s
+++ b/llvm/test/MC/AMDGPU/gfx1250_asm_vimage_err.s
@@ -1,98 +1,121 @@
-// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 6
; RUN: not llvm-mc -triple=amdgcn -mcpu=gfx1250 -filetype=null %s 2>&1 | FileCheck --check-prefix=GFX1250-ERR --implicit-check-not=error: --strict-whitespace %s
tensor_load_to_lds s[0:3], s[4:11] r128
-// GFX1250-ERR: :[[@LINE-1]]:1: error: instruction must set modifier r128=0
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must set modifier r128=0
tensor_load_to_lds s[0:3], s[4:11] th:TH_STORE_BYPASS scope:SCOPE_SYS
-// GFX1250-ERR: :[[@LINE-1]]:36: error: invalid th value for load instructions
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid th value for load instructions
tensor_load_to_lds s[0:3], s[4:11], s[12:15], s[16:19] r128
-// GFX1250-ERR: :[[@LINE-1]]:1: error: instruction must set modifier r128=0
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must set modifier r128=0
tensor_load_to_lds s[0:3], s[4:11], s[12:15], s[16:19] th:TH_STORE_NT_HT scope:SCOPE_DEV
-// GFX1250-ERR: :[[@LINE-1]]:56: error: invalid th value for load instructions
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid th value for load instructions
tensor_store_from_lds s[0:3], s[4:11] r128
-// GFX1250-ERR: :[[@LINE-1]]:1: error: instruction must set modifier r128=0
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must set modifier r128=0
tensor_store_from_lds s[0:3], s[4:11] th:TH_LOAD_BYPASS scope:SCOPE_SYS
-// GFX1250-ERR: :[[@LINE-1]]:39: error: invalid th value for store instructions
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid th value for store instructions
tensor_store_from_lds s[0:3], s[4:11], s[12:15], s[16:19] r128
-// GFX1250-ERR: :[[@LINE-1]]:1: error: instruction must set modifier r128=0
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: instruction must set modifier r128=0
tensor_store_from_lds s[0:3], s[4:11], s[12:15], s[16:19] th:TH_LOAD_NT_HT scope:SCOPE_DEV
-// GFX1250-ERR: :[[@LINE-1]]:59: error: invalid th value for store instructions
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid th value for store instructions
tensor_load_to_lds null, s[4:11]
-// GFX1250-ERR: :[[@LINE-1]]:20: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_load_to_lds null, s[4:11]
+// GFX1250-ERR: ^
tensor_load_to_lds s[0:3], null
-// GFX1250-ERR: :[[@LINE-1]]:28: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_load_to_lds s[0:3], null
+// GFX1250-ERR: ^
tensor_load_to_lds null, s[4:11], s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:20: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_load_to_lds null, s[4:11], s[12:15], s[16:19]
+// GFX1250-ERR: ^
tensor_load_to_lds s[0:3], null, s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:28: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_load_to_lds s[0:3], null, s[12:15], s[16:19]
+// GFX1250-ERR: ^
tensor_load_to_lds s[0:3], s[4:11], null, s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:37: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_load_to_lds s[0:3], s[4:11], null, s[16:19]
+// GFX1250-ERR: ^
tensor_load_to_lds s[0:3], s[4:11], s[12:15], null
-// GFX1250-ERR: :[[@LINE-1]]:47: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_load_to_lds s[0:3], s[4:11], s[12:15], null
+// GFX1250-ERR: ^
tensor_store_from_lds null, s[4:11]
-// GFX1250-ERR: :[[@LINE-1]]:23: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_store_from_lds null, s[4:11]
+// GFX1250-ERR: ^
tensor_store_from_lds s[0:3], null
-// GFX1250-ERR: :[[@LINE-1]]:31: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_store_from_lds s[0:3], null
+// GFX1250-ERR: ^
tensor_store_from_lds null, s[4:11], s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:23: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_store_from_lds null, s[4:11], s[12:15], s[16:19]
+// GFX1250-ERR: ^
tensor_store_from_lds s[0:3], null, s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:31: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_store_from_lds s[0:3], null, s[12:15], s[16:19]
+// GFX1250-ERR: ^
tensor_store_from_lds s[0:3], s[4:11], null, s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:40: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_store_from_lds s[0:3], s[4:11], null, s[16:19]
+// GFX1250-ERR: ^
tensor_store_from_lds s[0:3], s[4:11], s[12:15], null
-// GFX1250-ERR: :[[@LINE-1]]:50: error: invalid operand for instruction
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
+// GFX1250-ERR: tensor_store_from_lds s[0:3], s[4:11], s[12:15], null
+// GFX1250-ERR: ^
tensor_load_to_lds s[14:17], s[4:11]
-// GFX1250-ERR: :[[@LINE-1]]:20: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_load_to_lds s[0:3], s[6:13]
-// GFX1250-ERR: :[[@LINE-1]]:28: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_load_to_lds s[58:61], s[4:11], s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:20: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_load_to_lds s[0:3], s[22:29], s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:28: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_load_to_lds s[0:3], s[4:11], s[58:61], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:37: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_load_to_lds s[0:3], s[4:11], s[12:15], s[18:21]
-// GFX1250-ERR: :[[@LINE-1]]:47: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_store_from_lds s[14:17], s[4:11]
-// GFX1250-ERR: :[[@LINE-1]]:23: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_store_from_lds s[0:3], s[6:13]
-// GFX1250-ERR: :[[@LINE-1]]:31: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_store_from_lds s[58:61], s[4:11], s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:23: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_store_from_lds s[0:3], s[22:29], s[12:15], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:31: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_store_from_lds s[0:3], s[4:11], s[58:61], s[16:19]
-// GFX1250-ERR: :[[@LINE-1]]:40: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
tensor_store_from_lds s[0:3], s[4:11], s[12:15], s[18:21]
-// GFX1250-ERR: :[[@LINE-1]]:50: error: invalid register alignment
+// GFX1250-ERR: :[[@LINE-1]]:{{[0-9]+}}: error: invalid register alignment
More information about the llvm-commits
mailing list