diff options
| author | Matthias Braun <matze@braunis.de> | 2014-12-10 01:12:30 +0000 |
|---|---|---|
| committer | Matthias Braun <matze@braunis.de> | 2014-12-10 01:12:30 +0000 |
| commit | e3d3b88cb985c6a1d975463a00a57925b0ed64d1 (patch) | |
| tree | a8829432b9cf5825791b0ee792d740523c4d01a9 /llvm/lib/CodeGen | |
| parent | e5f861b781e1e434f2e58f434c7e89d5bb2e7840 (diff) | |
| download | bcm5719-llvm-e3d3b88cb985c6a1d975463a00a57925b0ed64d1.tar.gz bcm5719-llvm-e3d3b88cb985c6a1d975463a00a57925b0ed64d1.zip | |
Add a flag to enable/disable subregister liveness.
llvm-svn: 223884
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/LiveIntervalAnalysis.cpp | 8 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/LiveRangeCalc.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 3 |
3 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp index 9f7d5036772..77e7149c713 100644 --- a/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp +++ b/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp @@ -63,6 +63,10 @@ static cl::opt<bool> EnablePrecomputePhysRegs( static bool EnablePrecomputePhysRegs = false; #endif // NDEBUG +static cl::opt<bool> EnableSubRegLiveness( + "enable-subreg-liveness", cl::Hidden, cl::init(true), + cl::desc("Enable subregister liveness tracking.")); + void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesCFG(); AU.addRequired<AliasAnalysis>(); @@ -116,6 +120,10 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { AA = &getAnalysis<AliasAnalysis>(); Indexes = &getAnalysis<SlotIndexes>(); DomTree = &getAnalysis<MachineDominatorTree>(); + + if (EnableSubRegLiveness && MF->getSubtarget().enableSubRegLiveness()) + MRI->enableSubRegLiveness(true); + if (!LRCalc) LRCalc = new LiveRangeCalc(); diff --git a/llvm/lib/CodeGen/LiveRangeCalc.cpp b/llvm/lib/CodeGen/LiveRangeCalc.cpp index 4433fb1aaa2..daa1ee05f6a 100644 --- a/llvm/lib/CodeGen/LiveRangeCalc.cpp +++ b/llvm/lib/CodeGen/LiveRangeCalc.cpp @@ -55,7 +55,7 @@ void LiveRangeCalc::createDeadDefs(LiveInterval &LI) { const MachineInstr *MI = MO.getParent(); SlotIndex Idx = getDefIndex(*Indexes, *MI, MO.isEarlyClobber()); unsigned SubReg = MO.getSubReg(); - if (SubReg != 0 || LI.hasSubRanges()) { + if (LI.hasSubRanges() || (SubReg != 0 && MRI->tracksSubRegLiveness())) { unsigned Mask = SubReg != 0 ? TRI.getSubRegIndexLaneMask(SubReg) : MRI->getMaxLaneMaskForVReg(Reg); @@ -179,7 +179,8 @@ void LiveRangeCalc::extendToUses(LiveInterval &LI) { continue; SlotIndex Idx = getUseIndex(*Indexes, MO); unsigned SubReg = MO.getSubReg(); - if (MO.isUse() && (LI.hasSubRanges() || SubReg != 0)) { + if (MO.isUse() && (LI.hasSubRanges() || + (MRI->tracksSubRegLiveness() && SubReg != 0))) { unsigned Mask = SubReg != 0 ? TRI.getSubRegIndexLaneMask(SubReg) : Mask = MRI->getMaxLaneMaskForVReg(Reg); diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index c2fc4a7de46..aba9e5c986d 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -24,7 +24,8 @@ using namespace llvm; void MachineRegisterInfo::Delegate::anchor() {} MachineRegisterInfo::MachineRegisterInfo(const MachineFunction *MF) - : MF(MF), TheDelegate(nullptr), IsSSA(true), TracksLiveness(true) { + : MF(MF), TheDelegate(nullptr), IsSSA(true), TracksLiveness(true), + TracksSubRegLiveness(false) { VRegInfo.reserve(256); RegAllocHints.reserve(256); UsedRegUnits.resize(getTargetRegisterInfo()->getNumRegUnits()); |

