mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-22 03:04:34 +01:00
Fix llvm register allocator for native/cross build differences
Work around an issue in LLVM's register allocator, which can cause slightly different i386 object files, when produced by a native or cross build of clang. This adds another volatile qualifier to a float variable declaration in the weightCalcHelper() function, which otherwise produces slightly different float results on amd64 and i386 hosts. In turn, this can lead to different (but equivalent) register choices, and thus non-identical assembly code. See https://github.com/llvm/llvm-project/issues/99396 for more details. Note this is a temporary fix, meant to merge in time for 13.4. As soon as upstream has a permanent solution we will import that. PR: 276961 Reported by: cperciva MFC after: 3 days
This commit is contained in:
parent
baee801c92
commit
397c2693fa
@ -256,7 +256,12 @@ float VirtRegAuxInfo::weightCalcHelper(LiveInterval &LI, SlotIndex *Start,
|
||||
return -1.0f;
|
||||
}
|
||||
|
||||
float Weight = 1.0f;
|
||||
// FreeBSD customization: similar to the HWeight declaration below, add a
|
||||
// volatile qualifier to avoid slightly different weight results on amd64
|
||||
// and i386 hosts, and possibly choosing different registers in the register
|
||||
// allocator. See <https://github.com/llvm/llvm-project/issues/99396> for
|
||||
// more details.
|
||||
volatile float Weight = 1.0f;
|
||||
if (IsSpillable) {
|
||||
// Get loop info for mi.
|
||||
if (MI->getParent() != MBB) {
|
||||
|
Loading…
Reference in New Issue
Block a user