Skip to content

Commit 808dca1

Browse files
committed
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. llvm-svn: 130892
1 parent 369bddf commit 808dca1

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

llvm/lib/Target/X86/X86RegisterInfo.cpp

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -229,19 +229,14 @@ X86RegisterInfo::getMatchingSuperRegClass(const TargetRegisterClass *A,
229229
}
230230
break;
231231
case X86::sub_8bit_hi:
232-
if (B == &X86::GR8_ABCD_HRegClass) {
233-
if (A == &X86::GR64RegClass || A == &X86::GR64_ABCDRegClass ||
234-
A == &X86::GR64_NOREXRegClass ||
235-
A == &X86::GR64_NOSPRegClass ||
236-
A == &X86::GR64_NOREX_NOSPRegClass)
237-
return &X86::GR64_ABCDRegClass;
238-
else if (A == &X86::GR32RegClass || A == &X86::GR32_ABCDRegClass ||
239-
A == &X86::GR32_NOREXRegClass || A == &X86::GR32_NOSPRegClass)
240-
return &X86::GR32_ABCDRegClass;
241-
else if (A == &X86::GR16RegClass || A == &X86::GR16_ABCDRegClass ||
242-
A == &X86::GR16_NOREXRegClass)
243-
return &X86::GR16_ABCDRegClass;
244-
}
232+
if (B == &X86::GR8_ABCD_HRegClass ||
233+
B->hasSubClass(&X86::GR8_ABCD_HRegClass))
234+
switch (A->getSize()) {
235+
case 2: return getCommonSubClass(A, &X86::GR16_ABCDRegClass);
236+
case 4: return getCommonSubClass(A, &X86::GR32_ABCDRegClass);
237+
case 8: return getCommonSubClass(A, &X86::GR64_ABCDRegClass);
238+
default: return 0;
239+
}
245240
break;
246241
case X86::sub_16bit:
247242
if (B == &X86::GR16RegClass) {

0 commit comments

Comments
 (0)