[llvm] [X86] Fix 32-bit immediate assertion and convert into backend error (PR #123872)

Wesley Wiser via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 21 19:51:58 PST 2025


https://github.com/wesleywiser created https://github.com/llvm/llvm-project/pull/123872

The assertion previously did not work correctly because the operand was being truncated to an `int` prior to comparison.

Change the assertion into a a reported error as suggested in https://github.com/llvm/llvm-project/pull/101840#issuecomment-2304992425 by @arsenm

>From c82b6dbe637c7dbb798db099f15faefd196cbe70 Mon Sep 17 00:00:00 2001
From: Wesley Wiser <wwiser at gmail.com>
Date: Sun, 5 Jan 2025 05:09:35 +0000
Subject: [PATCH] [X86] Fix 32-bit immediate assertion and convert into backend
 error

The assertion previously did not work correctly because the operand was
being truncated to an `int` prior to comparison.
---
 llvm/lib/Target/X86/X86RegisterInfo.cpp | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp
index 4faf8bca4f9e02..8a35de5ca98f11 100644
--- a/llvm/lib/Target/X86/X86RegisterInfo.cpp
+++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp
@@ -965,11 +965,10 @@ X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
   }
 
   if (MI.getOperand(FIOperandNum+3).isImm()) {
-    // Offset is a 32-bit integer.
-    int Imm = (int)(MI.getOperand(FIOperandNum + 3).getImm());
-    int Offset = FIOffset + Imm;
-    assert((!Is64Bit || isInt<32>((long long)FIOffset + Imm)) &&
-           "Requesting 64-bit offset in 32-bit immediate!");
+    int64_t Imm = MI.getOperand(FIOperandNum + 3).getImm();
+    int Offset = FIOffset + (int)Imm;
+    if (!Is64Bit && !isInt<32>((int64_t)FIOffset + Imm))
+      MI.emitGenericError(("Requesting 64-bit offset in 32-bit immediate: " + MF.getName()).str());
     if (Offset != 0 || !tryOptimizeLEAtoMOV(II))
       MI.getOperand(FIOperandNum + 3).ChangeToImmediate(Offset);
   } else {



More information about the llvm-commits mailing list