Skip to content

Commit

Permalink
[X86] Fix a bug in handling GRXX subclasses in Domain Reassignment pass
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Guy Blank committed Dec 5, 2017
1 parent 9849529 commit f3cefdd
Show file tree
Hide file tree
Showing 2 changed files with 360 additions and 160 deletions.
8 changes: 4 additions & 4 deletions llvm/lib/Target/X86/X86DomainReassignment.cpp
Expand Up @@ -70,13 +70,13 @@ static RegDomain getDomain(const TargetRegisterClass *RC,
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;
Expand Down

0 comments on commit f3cefdd

Please sign in to comment.