https://github.com/rampitec updated https://github.com/llvm/llvm-project/pull/197803
>From 0c8606c341f3667f0b984e5bb634ddf96dfd9f28 Mon Sep 17 00:00:00 2001 From: Stanislav Mekhanoshin <[email protected]> Date: Thu, 14 May 2026 14:07:20 -0700 Subject: [PATCH] [AMDGPU] Error out on too large lit() constants --- .../Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp | 10 +++++++++- llvm/test/MC/AMDGPU/literals.s | 14 +++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index 1c4fe2c639572..80875c5bd9739 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -2540,8 +2540,12 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo // truncated to uint32_t), if the target doesn't support 64-bit literals, or // the lit modifier is explicitly used, we need to truncate it to the 32 // LSBs. - if (!AsmParser->has64BitLiterals() || Lit == LitModifier::Lit) + if (!AsmParser->has64BitLiterals() || Lit == LitModifier::Lit) { + if (!isInt<32>(Val) && !isUInt<32>(Val)) + const_cast<AMDGPUAsmParser *>(AsmParser)->Error( + Inst.getLoc(), "literal value out of range"); Val = Lo_32(Val); + } break; case AMDGPU::OPERAND_REG_IMM_FP64: @@ -2563,6 +2567,10 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo // 1) explicitly forced by using lit modifier; // 2) the value is a valid 32-bit representation (signed or unsigned), // meanwhile not forced by lit64 modifier. + if (Lit == LitModifier::Lit && !isInt<32>(Val) && !isUInt<32>(Val)) + const_cast<AMDGPUAsmParser *>(AsmParser)->Error( + Inst.getLoc(), "literal value out of range"); + if (Lit == LitModifier::Lit || (Lit != LitModifier::Lit64 && (isInt<32>(Val) || isUInt<32>(Val)))) Val = static_cast<uint64_t>(Val) << 32; diff --git a/llvm/test/MC/AMDGPU/literals.s b/llvm/test/MC/AMDGPU/literals.s index a6e6dfa5d6a88..af65636e8510a 100644 --- a/llvm/test/MC/AMDGPU/literals.s +++ b/llvm/test/MC/AMDGPU/literals.s @@ -2008,16 +2008,16 @@ v_add_nc_u64 v[0:1], v[0:1], 0x123456789 // NOSI: :[[@LINE-6]]:1: error: instruction not supported on this GPU (tahiti): v_add_nc_u64 // NOVI: :[[@LINE-7]]:1: error: instruction not supported on this GPU (tonga): v_add_nc_u64 -// FIXME: Literal is truncated but shall be rejected v_add_nc_u64 v[0:1], v[0:1], lit(0x123456789) // GFX1250-ASM: v_add_nc_u64_e64 v[0:1], v[0:1], lit(0x23456789) ; encoding: [0x00,0x00,0x28,0xd5,0x00,0xff,0x01,0x02,0x89,0x67,0x45,0x23] // GFX1250-DIS: v_add_nc_u64_e64 v[0:1], v[0:1], 0x23456789 ; encoding: [0x00,0x00,0x28,0xd5,0x00,0xff,0x01,0x02,0x89,0x67,0x45,0x23] // NOCI: :[[@LINE-3]]:1: error: instruction not supported on this GPU (bonaire): v_add_nc_u64 // NOGFX11: :[[@LINE-4]]:1: error: instruction not supported on this GPU (gfx1100): v_add_nc_u64 // NOGFX12: :[[@LINE-5]]:1: error: instruction not supported on this GPU (gfx1200): v_add_nc_u64 -// NOGFX9: :[[@LINE-6]]:1: error: instruction not supported on this GPU (gfx900): v_add_nc_u64 -// NOSI: :[[@LINE-7]]:1: error: instruction not supported on this GPU (tahiti): v_add_nc_u64 -// NOVI: :[[@LINE-8]]:1: error: instruction not supported on this GPU (tonga): v_add_nc_u64 +// NOGFX1250: :[[@LINE-6]]:1: error: literal value out of range +// NOGFX9: :[[@LINE-7]]:1: error: instruction not supported on this GPU (gfx900): v_add_nc_u64 +// NOSI: :[[@LINE-8]]:1: error: instruction not supported on this GPU (tahiti): v_add_nc_u64 +// NOVI: :[[@LINE-9]]:1: error: instruction not supported on this GPU (tonga): v_add_nc_u64 v_add_f64 v[0:1], v[0:1], lit(1) // GFX11: v_add_f64 v[0:1], v[0:1], lit(0x1) ; encoding: [0x00,0x00,0x27,0xd7,0x00,0xff,0x01,0x02,0x01,0x00,0x00,0x00] @@ -2066,11 +2066,11 @@ v_add_f64 v[0:1], v[0:1], 0x3ff000001 // NOGFX89: :[[@LINE-4]]:19: error: invalid operand for instruction // NOSICI: :[[@LINE-5]]:19: error: invalid operand for instruction -// FIXME: Literal is truncated but shall be rejected v_add_f64 v[0:1], v[0:1], lit(0x3ff000001) // GFX1250-ASM: v_add_f64_e64 v[0:1], v[0:1], lit(0xff000001) ; encoding: [0x00,0x00,0x02,0xd5,0x00,0xff,0x01,0x02,0x01,0x00,0x00,0xff] // GFX1250-DIS: v_add_f64_e64 v[0:1], v[0:1], 0xff000001 ; encoding: [0x00,0x00,0x02,0xd5,0x00,0xff,0x01,0x02,0x01,0x00,0x00,0xff] // NOGFX11: :[[@LINE-3]]:19: error: invalid operand for instruction // NOGFX12: :[[@LINE-4]]:19: error: invalid operand for instruction -// NOGFX89: :[[@LINE-5]]:19: error: invalid operand for instruction -// NOSICI: :[[@LINE-6]]:19: error: invalid operand for instruction +// NOGFX1250: :[[@LINE-5]]:1: error: literal value out of range +// NOGFX89: :[[@LINE-6]]:19: error: invalid operand for instruction +// NOSICI: :[[@LINE-7]]:19: error: invalid operand for instruction _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
