diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86RegisterInfo.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp index 4401d1769ba..87175c32ddc 100644 --- a/llvm/lib/Target/X86/X86RegisterInfo.cpp +++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp @@ -146,19 +146,18 @@ X86RegisterInfo::getLargestLegalSuperClass(const TargetRegisterClass *RC, if (!Subtarget.hasVLX() && Super->getSize() == RC->getSize()) return Super; break; - case X86::FR32XRegClassID: - case X86::FR64XRegClassID: - // If VLX isn't support we shouldn't inflate to these classes. - if (!Subtarget.hasVLX()) - break; - // The VLX check above passed, AVX512 check below will pass. - LLVM_FALLTHROUGH; case X86::VR128XRegClassID: case X86::VR256XRegClassID: + // If VLX isn't support we shouldn't inflate to these classes. + if (Subtarget.hasVLX() && Super->getSize() == RC->getSize()) + return Super; + break; + case X86::FR32XRegClassID: + case X86::FR64XRegClassID: // If AVX-512 isn't support we shouldn't inflate to these classes. - if (!Subtarget.hasAVX512()) - break; - LLVM_FALLTHROUGH; + if (Subtarget.hasAVX512() && Super->getSize() == RC->getSize()) + return Super; + break; case X86::GR8RegClassID: case X86::GR16RegClassID: case X86::GR32RegClassID: |