Fix X86RegisterInfo::getMatchingSuperRegClass for sub_8bit_hi.

It is OK for B to be any GR8_ABCD_H superclass, the returned register class
doesn't have to map surjectively onto B.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130892 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen
2011-05-04 23:54:54 +00:00
parent 61396aebee
commit 4f5de9bb40

View File

@@ -229,19 +229,14 @@ X86RegisterInfo::getMatchingSuperRegClass(const TargetRegisterClass *A,
} }
break; break;
case X86::sub_8bit_hi: case X86::sub_8bit_hi:
if (B == &X86::GR8_ABCD_HRegClass) { if (B == &X86::GR8_ABCD_HRegClass ||
if (A == &X86::GR64RegClass || A == &X86::GR64_ABCDRegClass || B->hasSubClass(&X86::GR8_ABCD_HRegClass))
A == &X86::GR64_NOREXRegClass || switch (A->getSize()) {
A == &X86::GR64_NOSPRegClass || case 2: return getCommonSubClass(A, &X86::GR16_ABCDRegClass);
A == &X86::GR64_NOREX_NOSPRegClass) case 4: return getCommonSubClass(A, &X86::GR32_ABCDRegClass);
return &X86::GR64_ABCDRegClass; case 8: return getCommonSubClass(A, &X86::GR64_ABCDRegClass);
else if (A == &X86::GR32RegClass || A == &X86::GR32_ABCDRegClass || default: return 0;
A == &X86::GR32_NOREXRegClass || A == &X86::GR32_NOSPRegClass) }
return &X86::GR32_ABCDRegClass;
else if (A == &X86::GR16RegClass || A == &X86::GR16_ABCDRegClass ||
A == &X86::GR16_NOREXRegClass)
return &X86::GR16_ABCDRegClass;
}
break; break;
case X86::sub_16bit: case X86::sub_16bit:
if (B == &X86::GR16RegClass) { if (B == &X86::GR16RegClass) {