1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00

The different flavors of ARM have different valid subsets of registers. Check

that the set of callee-saved registers is correct for the specific platform.
<rdar://problem/10313708> & ctor_dtor_count & ctor_dtor_count-2

llvm-svn: 142706
This commit is contained in:
Bill Wendling 2011-10-22 00:29:28 +00:00
parent d964cf8939
commit 66327a8d0e

View File

@ -6015,9 +6015,19 @@ EmitSjLjDispatchBlock(MachineInstr *MI, MachineBasicBlock *MBB) const {
MachineInstrBuilder MIB(&*II);
for (unsigned i = 0; SavedRegs[i] != 0; ++i) {
if (!TRC->contains(SavedRegs[i])) continue;
if (!DefRegs[SavedRegs[i]])
MIB.addReg(SavedRegs[i], RegState::ImplicitDefine | RegState::Dead);
unsigned Reg = SavedRegs[i];
if (Subtarget->isThumb2() &&
!ARM::tGPRRegisterClass->contains(Reg) &&
!ARM::hGPRRegisterClass->contains(Reg))
continue;
else if (Subtarget->isThumb1Only() &&
!ARM::tGPRRegisterClass->contains(Reg))
continue;
else if (!Subtarget->isThumb() &&
!ARM::GPRRegisterClass->contains(Reg))
continue;
if (!DefRegs[Reg])
MIB.addReg(Reg, RegState::ImplicitDefine | RegState::Dead);
}
break;