[llvm] d21feb5 - [AMDGPU] Fix crash for inline-asm inputs of type MVT::Other (#153425)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 13 08:27:35 PDT 2025
Author: Robert Imschweiler
Date: 2025-08-13T17:27:31+02:00
New Revision: d21feb5e66f4db161dfcecd06583668e8486b674
URL: https://github.com/llvm/llvm-project/commit/d21feb5e66f4db161dfcecd06583668e8486b674
DIFF: https://github.com/llvm/llvm-project/commit/d21feb5e66f4db161dfcecd06583668e8486b674.diff
LOG: [AMDGPU] Fix crash for inline-asm inputs of type MVT::Other (#153425)
Added:
Modified:
llvm/lib/Target/AMDGPU/SIISelLowering.cpp
llvm/test/CodeGen/AMDGPU/inlineasm-illegal-type.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 2e76225bbc542..f58fde421f77d 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -16894,6 +16894,11 @@ SITargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI_,
const TargetRegisterClass *RC = nullptr;
if (Constraint.size() == 1) {
+ // Check if we cannot determine the bit size of the given value type. This
+ // can happen, for example, in this situation where we have an empty struct
+ // (size 0): `call void asm "", "v"({} poison)`-
+ if (VT == MVT::Other)
+ return TargetLowering::getRegForInlineAsmConstraint(TRI, Constraint, VT);
const unsigned BitWidth = VT.getSizeInBits();
switch (Constraint[0]) {
default:
diff --git a/llvm/test/CodeGen/AMDGPU/inlineasm-illegal-type.ll b/llvm/test/CodeGen/AMDGPU/inlineasm-illegal-type.ll
index 9f7f228297d47..535e02cf80c2c 100644
--- a/llvm/test/CodeGen/AMDGPU/inlineasm-illegal-type.ll
+++ b/llvm/test/CodeGen/AMDGPU/inlineasm-illegal-type.ll
@@ -18,6 +18,12 @@ define amdgpu_kernel void @v_input_output_i8() {
ret void
}
+; GCN: error: couldn't allocate input reg for constraint 'v'
+define amdgpu_kernel void @v_input_empty_struct() {
+ call void asm "", "v"({} poison)
+ ret void
+}
+
; SICI: error: couldn't allocate output register for constraint 's'
; SICI: error: couldn't allocate input reg for constraint 's'
; VI-NOT: error
More information about the llvm-commits
mailing list