[llvm] 6d67794 - X86MCCodeEmitter: Work around gcc/value-range.cc bug in GCC 13.3.0
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 6 12:37:54 PDT 2025
Author: Fangrui Song
Date: 2025-07-06T12:37:50-07:00
New Revision: 6d67794d164ebeedbd287816e1541964fb5d6c99
URL: https://github.com/llvm/llvm-project/commit/6d67794d164ebeedbd287816e1541964fb5d6c99
DIFF: https://github.com/llvm/llvm-project/commit/6d67794d164ebeedbd287816e1541964fb5d6c99.diff
LOG: X86MCCodeEmitter: Work around gcc/value-range.cc bug in GCC 13.3.0
GCC 13.3.0 -O3 miscompiles the `getImmFixupKind` after commit
c20379198c7fb66b9514d21ae1e07b0705e3e6fa (-O2 is good), leading to spurious
unreachable failure.
```
% ninja -C /tmp/out/custom-gcc-13 llc && /tmp/out/custom-gcc-13/bin/llc llvm/test/CodeGen/X86/2008-08-06-RewriterBug.ll -mtriple=i686
ninja: Entering directory `/tmp/out/custom-gcc-13'
ninja: no work to do.
Unknown immediate size
UNREACHABLE executed at /home/ray/llvm/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h:904!
```
The latest releases/gcc-13 branch contains the fix
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109934#c6 , resolving this
miscompile.
`Desc.TSFlags` works around the bug.
Added:
Modified:
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
index 5db00a7f17bc2..8412de32fcb96 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
@@ -2009,12 +2009,12 @@ void X86MCCodeEmitter::encodeInstruction(const MCInst &MI,
// (SSE4a extrq and insertq) have two trailing immediates.
// Skip two trainling conditional operands encoded in EVEX prefix
- unsigned RemaningOps = NumOps - CurOp - 2 * HasTwoConditionalOps;
- while (RemaningOps) {
+ unsigned RemainingOps = NumOps - CurOp - 2 * HasTwoConditionalOps;
+ while (RemainingOps) {
emitImmediate(MI.getOperand(CurOp++), MI.getLoc(),
- getImmFixupKind(TSFlags), X86II::isImmPCRel(TSFlags),
- StartByte, CB, Fixups);
- --RemaningOps;
+ getImmFixupKind(Desc.TSFlags),
+ X86II::isImmPCRel(Desc.TSFlags), StartByte, CB, Fixups);
+ --RemainingOps;
}
CurOp += 2 * HasTwoConditionalOps;
}
More information about the llvm-commits
mailing list