From: Matt Arsenault Date: Sat, 15 Aug 2015 00:12:37 +0000 (+0000) Subject: AMDGPU/SI: Update LiveVariables X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1bb08cda8a49c326fc59d69cc82224f4a5dad0a8;p=oota-llvm.git AMDGPU/SI: Update LiveVariables This is simple but won't work if/when this pass is moved to be post-SSA. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245134 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AMDGPU/SIFixSGPRLiveRanges.cpp b/lib/Target/AMDGPU/SIFixSGPRLiveRanges.cpp index b91649e54f9..016e2c8c886 100644 --- a/lib/Target/AMDGPU/SIFixSGPRLiveRanges.cpp +++ b/lib/Target/AMDGPU/SIFixSGPRLiveRanges.cpp @@ -48,6 +48,7 @@ #include "SIInstrInfo.h" #include "SIRegisterInfo.h" #include "llvm/CodeGen/LiveIntervalAnalysis.h" +#include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/CodeGen/MachineInstrBuilder.h" #include "llvm/CodeGen/MachinePostDominators.h" @@ -94,6 +95,7 @@ public: INITIALIZE_PASS_BEGIN(SIFixSGPRLiveRanges, DEBUG_TYPE, "SI Fix SGPR Live Ranges", false, false) INITIALIZE_PASS_DEPENDENCY(LiveIntervals) +INITIALIZE_PASS_DEPENDENCY(LiveVariables) INITIALIZE_PASS_DEPENDENCY(MachinePostDominatorTree) INITIALIZE_PASS_END(SIFixSGPRLiveRanges, DEBUG_TYPE, "SI Fix SGPR Live Ranges", false, false) @@ -111,10 +113,13 @@ bool SIFixSGPRLiveRanges::runOnMachineFunction(MachineFunction &MF) { const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo(); const SIRegisterInfo *TRI = static_cast( MF.getSubtarget().getRegisterInfo()); - LiveIntervals *LIS = &getAnalysis(); - MachinePostDominatorTree *PDT = &getAnalysis(); + + MachinePostDominatorTree *PDT = &getAnalysis(); std::vector> SGPRLiveRanges; + LiveIntervals *LIS = &getAnalysis(); + LiveVariables *LV = getAnalysisIfAvailable(); + // First pass, collect all live intervals for SGPRs for (const MachineBasicBlock &MBB : MF) { for (const MachineInstr &MI : MBB) { @@ -183,6 +188,9 @@ bool SIFixSGPRLiveRanges::runOnMachineFunction(MachineFunction &MF) { SuccB->getNumber() << " with NCD = " << NCD->getNumber() << '\n'); + assert(TargetRegisterInfo::isVirtualRegister(Reg) && + "Not expecting to extend live range of physreg"); + // FIXME: Need to figure out how to update LiveRange here so this pass // will be able to preserve LiveInterval analysis. MachineInstr *NCDSGPRUse = @@ -193,6 +201,11 @@ bool SIFixSGPRLiveRanges::runOnMachineFunction(MachineFunction &MF) { SlotIndex SI = LIS->InsertMachineInstrInMaps(NCDSGPRUse); LIS->extendToIndices(*LR, SI.getRegSlot()); + if (LV) { + // TODO: This won't work post-SSA + LV->HandleVirtRegUse(Reg, NCD, NCDSGPRUse); + } + DEBUG(NCDSGPRUse->dump()); } }