mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
Do not crash when joining two intervals of registers of different
classes: just ignore that move. Thanks to Vladimir Prus who found the bug! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14644 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e9c6551fed
commit
5de868b0b2
@ -502,7 +502,9 @@ void LiveIntervals::joinIntervals()
|
||||
const TargetRegisterClass *rcA, *rcB;
|
||||
rcA = mf_->getSSARegMap()->getRegClass(intA->reg);
|
||||
rcB = mf_->getSSARegMap()->getRegClass(intB->reg);
|
||||
assert(rcA == rcB && "registers must be of the same class");
|
||||
// if they are not of the same register class we continue
|
||||
if (rcA != rcB)
|
||||
continue;
|
||||
|
||||
// if their intervals do not overlap we join them
|
||||
if (!intB->overlaps(*intA)) {
|
||||
@ -524,6 +526,13 @@ void LiveIntervals::joinIntervals()
|
||||
MRegisterInfo::isVirtualRegister(intB->reg) &&
|
||||
"A must be physical and B must be virtual");
|
||||
|
||||
const TargetRegisterClass *rcA, *rcB;
|
||||
rcA = mri_->getRegClass(intA->reg);
|
||||
rcB = mf_->getSSARegMap()->getRegClass(intB->reg);
|
||||
// if they are not of the same register class we continue
|
||||
if (rcA != rcB)
|
||||
continue;
|
||||
|
||||
if (!intA->overlaps(*intB) &&
|
||||
!overlapsAliases(*intA, *intB)) {
|
||||
intA->join(*intB);
|
||||
|
Loading…
Reference in New Issue
Block a user