mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-16 12:24:03 +00:00
Really really bad local register allocator bug. On X86, it was never using ESI, EDI, and EBP because of a bug in RALocal::isPhysRegAvailable(). For example, when
it checks if ESI is available, it then looks at registers aliases to ESI. SIL is marked -2 (not allocatable) but isPhysRegAvailable() incorrectly assumes it is in use and returns false for ESI. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47499 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -368,7 +368,7 @@ bool RALocal::isPhysRegAvailable(unsigned PhysReg) const {
|
|||||||
// not free!
|
// not free!
|
||||||
for (const unsigned *AliasSet = TRI->getAliasSet(PhysReg);
|
for (const unsigned *AliasSet = TRI->getAliasSet(PhysReg);
|
||||||
*AliasSet; ++AliasSet)
|
*AliasSet; ++AliasSet)
|
||||||
if (PhysRegsUsed[*AliasSet] != -1) // Aliased register in use?
|
if (PhysRegsUsed[*AliasSet] >= 0) // Aliased register in use?
|
||||||
return false; // Can't use this reg then.
|
return false; // Can't use this reg then.
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user