mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
[multiversion] Thread a function argument through all the callers of the
getTTI method used to get an actual TTI object. No functionality changed. This just threads the argument and ensures code like the inliner can correctly look up the callee's TTI rather than using a fixed one. The next change will use this to implement per-function subtarget usage by TTI. The changes after that should eliminate the need for FTTI as that will have become the default. llvm-svn: 227730
This commit is contained in:
parent
2f448f269c
commit
89da465927
@ -23,7 +23,7 @@ class AssumptionCacheTracker;
|
||||
class CallSite;
|
||||
class DataLayout;
|
||||
class Function;
|
||||
class TargetTransformInfo;
|
||||
class TargetTransformInfoWrapperPass;
|
||||
|
||||
namespace InlineConstants {
|
||||
// Various magic constants used to adjust heuristics.
|
||||
@ -100,7 +100,7 @@ public:
|
||||
|
||||
/// \brief Cost analyzer used by inliner.
|
||||
class InlineCostAnalysis : public CallGraphSCCPass {
|
||||
const TargetTransformInfo *TTI;
|
||||
TargetTransformInfoWrapperPass *TTIWP;
|
||||
AssumptionCacheTracker *ACT;
|
||||
|
||||
public:
|
||||
|
@ -806,8 +806,7 @@ public:
|
||||
|
||||
explicit TargetTransformInfoWrapperPass(TargetTransformInfo TTI);
|
||||
|
||||
TargetTransformInfo &getTTI() { return TTI; }
|
||||
const TargetTransformInfo &getTTI() const { return TTI; }
|
||||
TargetTransformInfo &getTTI(Function &F) { return TTI; }
|
||||
};
|
||||
|
||||
/// \brief Create an analysis pass wrapper around a TTI object.
|
||||
|
@ -84,7 +84,7 @@ bool
|
||||
CostModelAnalysis::runOnFunction(Function &F) {
|
||||
this->F = &F;
|
||||
auto *TTIWP = getAnalysisIfAvailable<TargetTransformInfoWrapperPass>();
|
||||
TTI = TTIWP ? &TTIWP->getTTI() : nullptr;
|
||||
TTI = TTIWP ? &TTIWP->getTTI(F) : nullptr;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -45,6 +45,6 @@ void FunctionTargetTransformInfo::releaseMemory() {}
|
||||
|
||||
bool FunctionTargetTransformInfo::runOnFunction(Function &F) {
|
||||
Fn = &F;
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
return false;
|
||||
}
|
||||
|
@ -1251,7 +1251,7 @@ void InlineCostAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
}
|
||||
|
||||
bool InlineCostAnalysis::runOnSCC(CallGraphSCC &SCC) {
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
TTIWP = &getAnalysis<TargetTransformInfoWrapperPass>();
|
||||
ACT = &getAnalysis<AssumptionCacheTracker>();
|
||||
return false;
|
||||
}
|
||||
@ -1309,7 +1309,7 @@ InlineCost InlineCostAnalysis::getInlineCost(CallSite CS, Function *Callee,
|
||||
DEBUG(llvm::dbgs() << " Analyzing call of " << Callee->getName()
|
||||
<< "...\n");
|
||||
|
||||
CallAnalyzer CA(Callee->getDataLayout(), *TTI,
|
||||
CallAnalyzer CA(Callee->getDataLayout(), TTIWP->getTTI(*Callee),
|
||||
ACT->getAssumptionCache(*Callee), *Callee, Threshold);
|
||||
bool ShouldInline = CA.analyzeCall(CS);
|
||||
|
||||
|
@ -213,7 +213,7 @@ bool CodeGenPrepare::runOnFunction(Function &F) {
|
||||
if (TM)
|
||||
TLI = TM->getSubtargetImpl(F)->getTargetLowering();
|
||||
TLInfo = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
DominatorTreeWrapperPass *DTWP =
|
||||
getAnalysisIfAvailable<DominatorTreeWrapperPass>();
|
||||
DT = DTWP ? &DTWP->getDomTree() : nullptr;
|
||||
|
@ -138,7 +138,7 @@ private:
|
||||
/// \brief Initialize the pass.
|
||||
void setup(Function &Fn) {
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(Fn);
|
||||
Entry = &Fn.getEntryBlock();
|
||||
}
|
||||
|
||||
|
@ -734,7 +734,7 @@ public:
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
auto *DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
auto &TLI = getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
auto &TTI = getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
auto &TTI = getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
|
||||
|
||||
|
@ -1937,7 +1937,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();
|
||||
TLI = TLIP ? &TLIP->getTLI() : nullptr;
|
||||
auto *TTIP = getAnalysisIfAvailable<TargetTransformInfoWrapperPass>();
|
||||
TTI = TTIP ? &TTIP->getTTI() : nullptr;
|
||||
TTI = TTIP ? &TTIP->getTTI(*L->getHeader()->getParent()) : nullptr;
|
||||
|
||||
DeadInsts.clear();
|
||||
Changed = false;
|
||||
|
@ -204,8 +204,9 @@ namespace {
|
||||
}
|
||||
|
||||
const TargetTransformInfo *getTargetTransformInfo() {
|
||||
return TTI ? TTI : (TTI = &getAnalysis<TargetTransformInfoWrapperPass>()
|
||||
.getTTI());
|
||||
return TTI ? TTI
|
||||
: (TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
|
||||
*CurLoop->getHeader()->getParent()));
|
||||
}
|
||||
|
||||
Loop *getLoop() const { return CurLoop; }
|
||||
|
@ -101,10 +101,11 @@ bool LoopRotate::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
// Save the loop metadata.
|
||||
MDNode *LoopMD = L->getLoopID();
|
||||
|
||||
Function &F = *L->getHeader()->getParent();
|
||||
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(
|
||||
*L->getHeader()->getParent());
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
|
||||
auto *DTWP = getAnalysisIfAvailable<DominatorTreeWrapperPass>();
|
||||
DT = DTWP ? &DTWP->getDomTree() : nullptr;
|
||||
|
||||
|
@ -4866,8 +4866,9 @@ LSRInstance::LSRInstance(Loop *L, Pass *P)
|
||||
: IU(P->getAnalysis<IVUsers>()), SE(P->getAnalysis<ScalarEvolution>()),
|
||||
DT(P->getAnalysis<DominatorTreeWrapperPass>().getDomTree()),
|
||||
LI(P->getAnalysis<LoopInfoWrapperPass>().getLoopInfo()),
|
||||
TTI(P->getAnalysis<TargetTransformInfoWrapperPass>().getTTI()), L(L),
|
||||
Changed(false), IVIncInsertPos(nullptr) {
|
||||
TTI(P->getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
|
||||
*L->getHeader()->getParent())),
|
||||
L(L), Changed(false), IVIncInsertPos(nullptr) {
|
||||
// If LoopSimplify form is not available, stay out of trouble.
|
||||
if (!L->isLoopSimplifyForm())
|
||||
return;
|
||||
@ -5100,7 +5101,8 @@ bool LoopStrengthReduce::runOnLoop(Loop *L, LPPassManager & /*LPM*/) {
|
||||
#endif
|
||||
unsigned numFolded = Rewriter.replaceCongruentIVs(
|
||||
L, &getAnalysis<DominatorTreeWrapperPass>().getDomTree(), DeadInsts,
|
||||
&getAnalysis<TargetTransformInfoWrapperPass>().getTTI());
|
||||
&getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
|
||||
*L->getHeader()->getParent()));
|
||||
if (numFolded) {
|
||||
Changed = true;
|
||||
DeleteTriviallyDeadInstructions(DeadInsts);
|
||||
|
@ -346,14 +346,15 @@ bool LoopUnroll::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
if (skipOptnoneFunction(L))
|
||||
return false;
|
||||
|
||||
Function &F = *L->getHeader()->getParent();
|
||||
|
||||
LoopInfo *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
ScalarEvolution *SE = &getAnalysis<ScalarEvolution>();
|
||||
const TargetTransformInfo &TTI =
|
||||
getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
const FunctionTargetTransformInfo &FTTI =
|
||||
getAnalysis<FunctionTargetTransformInfo>();
|
||||
auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(
|
||||
*L->getHeader()->getParent());
|
||||
auto &AC = getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
|
||||
|
||||
BasicBlock *Header = L->getHeader();
|
||||
DEBUG(dbgs() << "Loop Unroll: F[" << Header->getParent()->getName()
|
||||
|
@ -433,7 +433,8 @@ bool LoopUnswitch::processCurrentLoop() {
|
||||
// Probably we reach the quota of branches for this loop. If so
|
||||
// stop unswitching.
|
||||
if (!BranchesInfo.countLoop(
|
||||
currentLoop, getAnalysis<TargetTransformInfoWrapperPass>().getTTI(),
|
||||
currentLoop, getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
|
||||
*currentLoop->getHeader()->getParent()),
|
||||
AC))
|
||||
return false;
|
||||
|
||||
|
@ -63,7 +63,7 @@ bool PartiallyInlineLibCalls::runOnFunction(Function &F) {
|
||||
TargetLibraryInfo *TLI =
|
||||
&getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
const TargetTransformInfo *TTI =
|
||||
&getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
&getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
for (Function::iterator BB = F.begin(), BE = F.end(); BB != BE;) {
|
||||
CurrBB = BB++;
|
||||
|
||||
|
@ -859,7 +859,8 @@ bool SeparateConstOffsetFromGEP::splitGEP(GetElementPtrInst *GEP) {
|
||||
// case.
|
||||
if (!LowerGEP) {
|
||||
TargetTransformInfo &TTI =
|
||||
getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
|
||||
*GEP->getParent()->getParent());
|
||||
if (!TTI.isLegalAddressingMode(GEP->getType()->getElementType(),
|
||||
/*BaseGV=*/nullptr, AccumulativeByteOffset,
|
||||
/*HasBaseReg=*/true, /*Scale=*/0)) {
|
||||
|
@ -206,7 +206,7 @@ struct CFGSimplifyPass : public FunctionPass {
|
||||
AssumptionCache *AC =
|
||||
&getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
|
||||
const TargetTransformInfo &TTI =
|
||||
getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
return simplifyFunctionCFG(F, TTI, DL, AC, BonusInstThreshold);
|
||||
|
@ -386,7 +386,7 @@ bool TailCallElim::runTRE(Function &F) {
|
||||
// right, so don't even try to convert it...
|
||||
if (F.getFunctionType()->isVarArg()) return false;
|
||||
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
BasicBlock *OldEntry = nullptr;
|
||||
bool TailCallsAreMarkedTail = false;
|
||||
SmallVector<PHINode*, 8> ArgumentPHIs;
|
||||
|
@ -201,7 +201,7 @@ namespace {
|
||||
initializeBBVectorizePass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
BBVectorize(Pass *P, const VectorizeConfig &C)
|
||||
BBVectorize(Pass *P, Function &F, const VectorizeConfig &C)
|
||||
: BasicBlockPass(ID), Config(C) {
|
||||
AA = &P->getAnalysis<AliasAnalysis>();
|
||||
DT = &P->getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
@ -210,7 +210,7 @@ namespace {
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
TTI = IgnoreTargetInfo
|
||||
? nullptr
|
||||
: &P->getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
: &P->getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
}
|
||||
|
||||
typedef std::pair<Value *, Value *> ValuePair;
|
||||
@ -446,7 +446,8 @@ namespace {
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
TTI = IgnoreTargetInfo
|
||||
? nullptr
|
||||
: &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
: &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
|
||||
*BB.getParent());
|
||||
|
||||
return vectorizeBB(BB);
|
||||
}
|
||||
@ -3207,7 +3208,7 @@ BasicBlockPass *llvm::createBBVectorizePass(const VectorizeConfig &C) {
|
||||
|
||||
bool
|
||||
llvm::vectorizeBasicBlock(Pass *P, BasicBlock &BB, const VectorizeConfig &C) {
|
||||
BBVectorize BBVectorizer(P, C);
|
||||
BBVectorize BBVectorizer(P, *BB.getParent(), C);
|
||||
return BBVectorizer.vectorizeBB(BB);
|
||||
}
|
||||
|
||||
|
@ -1330,7 +1330,7 @@ struct LoopVectorize : public FunctionPass {
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
BFI = &getAnalysis<BlockFrequencyInfo>();
|
||||
auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();
|
||||
|
@ -3052,7 +3052,7 @@ struct SLPVectorizer : public FunctionPass {
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F);
|
||||
auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();
|
||||
TLI = TLIP ? &TLIP->getTLI() : nullptr;
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
|
Loading…
Reference in New Issue
Block a user