Implement SystemZRegisterInfo::getMatchingSuperRegClass to enable cross-class joins.

llvm-svn: 130857
This commit is contained in:
Jakob Stoklund Olesen 2011-05-04 19:02:04 +00:00
parent e7528c45ea
commit 093a94cdae
2 changed files with 18 additions and 0 deletions

View File

@ -58,6 +58,20 @@ BitVector SystemZRegisterInfo::getReservedRegs(const MachineFunction &MF) const
return Reserved;
}
const TargetRegisterClass*
SystemZRegisterInfo::getMatchingSuperRegClass(const TargetRegisterClass *A,
const TargetRegisterClass *B,
unsigned Idx) const {
switch(Idx) {
// Exact sub-classes don't exist for the other sub-register indexes.
default: return 0;
case SystemZ::subreg_32bit:
if (B == SystemZ::ADDR32RegisterClass)
return A->getSize() == 8 ? SystemZ::ADDR64RegisterClass : 0;
return A;
}
}
void SystemZRegisterInfo::
eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
MachineBasicBlock::iterator I) const {

View File

@ -34,6 +34,10 @@ struct SystemZRegisterInfo : public SystemZGenRegisterInfo {
BitVector getReservedRegs(const MachineFunction &MF) const;
const TargetRegisterClass*
getMatchingSuperRegClass(const TargetRegisterClass *A,
const TargetRegisterClass *B, unsigned Idx) const;
void eliminateCallFramePseudoInstr(MachineFunction &MF,
MachineBasicBlock &MBB,
MachineBasicBlock::iterator I) const;