mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-03 11:08:32 +00:00
LiveIntervalAnalysis: Remove LiveVariables requirement
This requirement was a huge hack to keep LiveVariables alive because it was optionally used by TwoAddressInstructionPass and PHIElimination. However we have AnalysisUsage::addUsedIfAvailable() which we can use in those passes. This re-applies r260806 with LiveVariables manually added to PowerPC to hopefully not break the stage 2 bots this time. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267954 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
36575f0cb1
commit
66bbcee0a9
@ -9,8 +9,7 @@
|
|||||||
//
|
//
|
||||||
// This file implements the LiveInterval analysis pass which is used
|
// This file implements the LiveInterval analysis pass which is used
|
||||||
// by the Linear Scan Register allocator. This pass linearizes the
|
// by the Linear Scan Register allocator. This pass linearizes the
|
||||||
// basic blocks of the function in DFS order and uses the
|
// basic blocks of the function in DFS order and computes live intervals for
|
||||||
// LiveVariables pass to conservatively compute live intervals for
|
|
||||||
// each virtual and physical register.
|
// each virtual and physical register.
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
@ -46,7 +45,6 @@ char &llvm::LiveIntervalsID = LiveIntervals::ID;
|
|||||||
INITIALIZE_PASS_BEGIN(LiveIntervals, "liveintervals",
|
INITIALIZE_PASS_BEGIN(LiveIntervals, "liveintervals",
|
||||||
"Live Interval Analysis", false, false)
|
"Live Interval Analysis", false, false)
|
||||||
INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
|
INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
|
||||||
INITIALIZE_PASS_DEPENDENCY(LiveVariables)
|
|
||||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||||
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
||||||
INITIALIZE_PASS_END(LiveIntervals, "liveintervals",
|
INITIALIZE_PASS_END(LiveIntervals, "liveintervals",
|
||||||
@ -75,10 +73,6 @@ void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {
|
|||||||
AU.setPreservesCFG();
|
AU.setPreservesCFG();
|
||||||
AU.addRequired<AAResultsWrapperPass>();
|
AU.addRequired<AAResultsWrapperPass>();
|
||||||
AU.addPreserved<AAResultsWrapperPass>();
|
AU.addPreserved<AAResultsWrapperPass>();
|
||||||
// LiveVariables isn't really required by this analysis, it is only required
|
|
||||||
// here to make sure it is live during TwoAddressInstructionPass and
|
|
||||||
// PHIElimination. This is temporary.
|
|
||||||
AU.addRequired<LiveVariables>();
|
|
||||||
AU.addPreserved<LiveVariables>();
|
AU.addPreserved<LiveVariables>();
|
||||||
AU.addPreservedID(MachineLoopInfoID);
|
AU.addPreservedID(MachineLoopInfoID);
|
||||||
AU.addRequiredTransitiveID(MachineDominatorsID);
|
AU.addRequiredTransitiveID(MachineDominatorsID);
|
||||||
|
@ -120,6 +120,7 @@ INITIALIZE_PASS_END(PHIElimination, "phi-node-elimination",
|
|||||||
"Eliminate PHI nodes for register allocation", false, false)
|
"Eliminate PHI nodes for register allocation", false, false)
|
||||||
|
|
||||||
void PHIElimination::getAnalysisUsage(AnalysisUsage &AU) const {
|
void PHIElimination::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||||
|
AU.addUsedIfAvailable<LiveVariables>();
|
||||||
AU.addPreserved<LiveVariables>();
|
AU.addPreserved<LiveVariables>();
|
||||||
AU.addPreserved<SlotIndexes>();
|
AU.addPreserved<SlotIndexes>();
|
||||||
AU.addPreserved<LiveIntervals>();
|
AU.addPreserved<LiveIntervals>();
|
||||||
|
@ -156,6 +156,7 @@ public:
|
|||||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||||
AU.setPreservesCFG();
|
AU.setPreservesCFG();
|
||||||
AU.addRequired<AAResultsWrapperPass>();
|
AU.addRequired<AAResultsWrapperPass>();
|
||||||
|
AU.addUsedIfAvailable<LiveVariables>();
|
||||||
AU.addPreserved<LiveVariables>();
|
AU.addPreserved<LiveVariables>();
|
||||||
AU.addPreserved<SlotIndexes>();
|
AU.addPreserved<SlotIndexes>();
|
||||||
AU.addPreserved<LiveIntervals>();
|
AU.addPreserved<LiveIntervals>();
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "PPC.h"
|
#include "PPC.h"
|
||||||
#include "PPCTargetObjectFile.h"
|
#include "PPCTargetObjectFile.h"
|
||||||
#include "PPCTargetTransformInfo.h"
|
#include "PPCTargetTransformInfo.h"
|
||||||
|
#include "llvm/CodeGen/LiveVariables.h"
|
||||||
#include "llvm/CodeGen/Passes.h"
|
#include "llvm/CodeGen/Passes.h"
|
||||||
#include "llvm/IR/Function.h"
|
#include "llvm/IR/Function.h"
|
||||||
#include "llvm/IR/LegacyPassManager.h"
|
#include "llvm/IR/LegacyPassManager.h"
|
||||||
@ -387,8 +388,14 @@ void PPCPassConfig::addPreRegAlloc() {
|
|||||||
insertPass(VSXFMAMutateEarly ? &RegisterCoalescerID : &MachineSchedulerID,
|
insertPass(VSXFMAMutateEarly ? &RegisterCoalescerID : &MachineSchedulerID,
|
||||||
&PPCVSXFMAMutateID);
|
&PPCVSXFMAMutateID);
|
||||||
}
|
}
|
||||||
if (getPPCTargetMachine().getRelocationModel() == Reloc::PIC_)
|
if (getPPCTargetMachine().getRelocationModel() == Reloc::PIC_) {
|
||||||
|
// FIXME: LiveVariables should not be necessary here!
|
||||||
|
// PPCTLSDYnamicCallPass uses LiveIntervals which previously dependet on
|
||||||
|
// LiveVariables. This (unnecessary) dependency has been removed now,
|
||||||
|
// however a stage-2 clang build fails without LiveVariables computed here.
|
||||||
|
addPass(&LiveVariablesID, false);
|
||||||
addPass(createPPCTLSDynamicCallPass());
|
addPass(createPPCTLSDynamicCallPass());
|
||||||
|
}
|
||||||
if (EnableExtraTOCRegDeps)
|
if (EnableExtraTOCRegDeps)
|
||||||
addPass(createPPCTOCRegDepsPass());
|
addPass(createPPCTOCRegDepsPass());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user