[X86] Fix a bug in handling GRXX subclasses in Domain Reassignment pass
When trying to determine the correct Mask register class corresponding
to a GPR register class, not all register classes were handled.
This caused an assertion to be raised on some scenarios.
Differential Revision:
https://reviews.llvm.org/D40290
llvm-svn: 319745
diff --git a/llvm/lib/Target/X86/X86DomainReassignment.cpp b/llvm/lib/Target/X86/X86DomainReassignment.cpp
index f205d3e..573b7ca 100644
--- a/llvm/lib/Target/X86/X86DomainReassignment.cpp
+++ b/llvm/lib/Target/X86/X86DomainReassignment.cpp
@@ -70,13 +70,13 @@
static const TargetRegisterClass *getDstRC(const TargetRegisterClass *SrcRC,
RegDomain Domain) {
assert(Domain == MaskDomain && "add domain");
- if (SrcRC == &X86::GR8RegClass)
+ if (X86::GR8RegClass.hasSubClassEq(SrcRC))
return &X86::VK8RegClass;
- if (SrcRC == &X86::GR16RegClass)
+ if (X86::GR16RegClass.hasSubClassEq(SrcRC))
return &X86::VK16RegClass;
- if (SrcRC == &X86::GR32RegClass)
+ if (X86::GR32RegClass.hasSubClassEq(SrcRC))
return &X86::VK32RegClass;
- if (SrcRC == &X86::GR64RegClass)
+ if (X86::GR64RegClass.hasSubClassEq(SrcRC))
return &X86::VK64RegClass;
llvm_unreachable("add register class");
return nullptr;