From ae1a6e1e169e894560255a79d5bb7d249866acaf Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Tue, 10 Nov 2015 23:23:05 +0000 Subject: [PATCH] TableGen: Emit LaneMask for register classes without subregisters as ~0u This makes it slightly easier to handle classes with and without subregister uniformly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252671 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/RegisterCoalescer.cpp | 23 +++++++++++++---------- utils/TableGen/CodeGenRegisters.cpp | 6 ++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/CodeGen/RegisterCoalescer.cpp b/lib/CodeGen/RegisterCoalescer.cpp index 7739d64b45f..176b2b5375f 100644 --- a/lib/CodeGen/RegisterCoalescer.cpp +++ b/lib/CodeGen/RegisterCoalescer.cpp @@ -2975,22 +2975,25 @@ bool RegisterCoalescer::runOnMachineFunction(MachineFunction &fn) { if (MRI->recomputeRegClass(Reg)) { DEBUG(dbgs() << PrintReg(Reg) << " inflated to " << TRI->getRegClassName(MRI->getRegClass(Reg)) << '\n'); + ++NumInflated; + LiveInterval &LI = LIS->getInterval(Reg); - LaneBitmask MaxMask = MRI->getMaxLaneMaskForVReg(Reg); - if (MaxMask == 0) { + if (LI.hasSubRanges()) { // If the inflated register class does not support subregisters anymore // remove the subranges. - LI.clearSubRanges(); - } else { + if (!MRI->shouldTrackSubRegLiveness(Reg)) { + LI.clearSubRanges(); + } else { #ifndef NDEBUG - // If subranges are still supported, then the same subregs should still - // be supported. - for (LiveInterval::SubRange &S : LI.subranges()) { - assert ((S.LaneMask & ~MaxMask) == 0); - } + LaneBitmask MaxMask = MRI->getMaxLaneMaskForVReg(Reg); + // If subranges are still supported, then the same subregs + // should still be supported. + for (LiveInterval::SubRange &S : LI.subranges()) { + assert((S.LaneMask & ~MaxMask) == 0); + } #endif + } } - ++NumInflated; } } diff --git a/utils/TableGen/CodeGenRegisters.cpp b/utils/TableGen/CodeGenRegisters.cpp index c9e6d1d379d..f6eadce9c3d 100644 --- a/utils/TableGen/CodeGenRegisters.cpp +++ b/utils/TableGen/CodeGenRegisters.cpp @@ -1274,6 +1274,12 @@ void CodeGenRegBank::computeSubRegLaneMasks() { continue; LaneMask |= SubRegIndex.LaneMask; } + + // For classes without any subregisters set LaneMask to ~0u instead of 0. + // This makes it easier for client code to handle classes uniformly. + if (LaneMask == 0) + LaneMask = ~0u; + RegClass.LaneMask = LaneMask; } } -- 2.34.1