[llvm] [X86] Fix 32-bit immediate assertion and convert into backend error (PR #123872)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 21 19:52:32 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Wesley Wiser (wesleywiser)
<details>
<summary>Changes</summary>
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
---
Full diff: https://github.com/llvm/llvm-project/pull/123872.diff
1 Files Affected:
- (modified) llvm/lib/Target/X86/X86RegisterInfo.cpp (+4-5)
``````````diff
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 {
``````````
</details>
https://github.com/llvm/llvm-project/pull/123872
More information about the llvm-commits
mailing list