diff options
author | Sjoerd Meijer <sjoerd.meijer@arm.com> | 2019-10-16 10:55:06 +0000 |
---|---|---|
committer | Sjoerd Meijer <sjoerd.meijer@arm.com> | 2019-10-16 10:55:06 +0000 |
commit | 5a131889665fadca1306e75cd463f0da320d6717 (patch) | |
tree | 6881b54c763e84ecff7161af9946468227181c99 /llvm/lib/CodeGen/HardwareLoops.cpp | |
parent | b150494fc7b34b728024380782fcb5c26d125364 (diff) | |
download | bcm5719-llvm-5a131889665fadca1306e75cd463f0da320d6717.tar.gz bcm5719-llvm-5a131889665fadca1306e75cd463f0da320d6717.zip |
Revert "[HardwareLoops] Optimisation remarks"
while I investigate the PPC build bot failures.
This reverts commit ad763751565b9663bc338fa2ca5ade86c6ca22ec.
llvm-svn: 374992
Diffstat (limited to 'llvm/lib/CodeGen/HardwareLoops.cpp')
-rw-r--r-- | llvm/lib/CodeGen/HardwareLoops.cpp | 104 |
1 files changed, 23 insertions, 81 deletions
diff --git a/llvm/lib/CodeGen/HardwareLoops.cpp b/llvm/lib/CodeGen/HardwareLoops.cpp index 968177cd96f..6a0f98d2e2b 100644 --- a/llvm/lib/CodeGen/HardwareLoops.cpp +++ b/llvm/lib/CodeGen/HardwareLoops.cpp @@ -21,7 +21,6 @@ #include "llvm/ADT/Statistic.h" #include "llvm/Analysis/AssumptionCache.h" #include "llvm/Analysis/LoopInfo.h" -#include "llvm/Analysis/OptimizationRemarkEmitter.h" #include "llvm/Analysis/ScalarEvolution.h" #include "llvm/Analysis/ScalarEvolutionExpander.h" #include "llvm/Analysis/TargetTransformInfo.h" @@ -76,44 +75,8 @@ ForceGuardLoopEntry( STATISTIC(NumHWLoops, "Number of loops converted to hardware loops"); -#ifndef NDEBUG -static void debugHWLoopFailure(const StringRef DebugMsg, - Instruction *I) { - dbgs() << "HWLoops: " << DebugMsg; - if (I) - dbgs() << ' ' << *I; - else - dbgs() << '.'; - dbgs() << '\n'; -} -#endif - -static OptimizationRemarkAnalysis -createHWLoopAnalysis(StringRef RemarkName, Loop *L, Instruction *I) { - Value *CodeRegion = L->getHeader(); - DebugLoc DL = L->getStartLoc(); - - if (I) { - CodeRegion = I->getParent(); - // If there is no debug location attached to the instruction, revert back to - // using the loop's. - if (I->getDebugLoc()) - DL = I->getDebugLoc(); - } - - OptimizationRemarkAnalysis R(DEBUG_TYPE, RemarkName, DL, CodeRegion); - R << "hardware-loop not created: "; - return R; -} - namespace { - void reportHWLoopFailure(const StringRef Msg, const StringRef ORETag, - OptimizationRemarkEmitter *ORE, Loop *TheLoop, Instruction *I = nullptr) { - LLVM_DEBUG(debugHWLoopFailure(Msg, I)); - ORE->emit(createHWLoopAnalysis(ORETag, TheLoop, I) << Msg); - } - using TTI = TargetTransformInfo; class HardwareLoops : public FunctionPass { @@ -134,7 +97,6 @@ namespace { AU.addRequired<ScalarEvolutionWrapperPass>(); AU.addRequired<AssumptionCacheTracker>(); AU.addRequired<TargetTransformInfoWrapperPass>(); - AU.addRequired<OptimizationRemarkEmitterWrapperPass>(); } // Try to convert the given Loop into a hardware loop. @@ -148,7 +110,6 @@ namespace { ScalarEvolution *SE = nullptr; LoopInfo *LI = nullptr; const DataLayout *DL = nullptr; - OptimizationRemarkEmitter *ORE = nullptr; const TargetTransformInfo *TTI = nullptr; DominatorTree *DT = nullptr; bool PreserveLCSSA = false; @@ -182,9 +143,8 @@ namespace { public: HardwareLoop(HardwareLoopInfo &Info, ScalarEvolution &SE, - const DataLayout &DL, - OptimizationRemarkEmitter *ORE) : - SE(SE), DL(DL), ORE(ORE), L(Info.L), M(L->getHeader()->getModule()), + const DataLayout &DL) : + SE(SE), DL(DL), L(Info.L), M(L->getHeader()->getModule()), ExitCount(Info.ExitCount), CountType(Info.CountType), ExitBranch(Info.ExitBranch), @@ -197,7 +157,6 @@ namespace { private: ScalarEvolution &SE; const DataLayout &DL; - OptimizationRemarkEmitter *ORE = nullptr; Loop *L = nullptr; Module *M = nullptr; const SCEV *ExitCount = nullptr; @@ -223,7 +182,6 @@ bool HardwareLoops::runOnFunction(Function &F) { DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(F); DL = &F.getParent()->getDataLayout(); - ORE = &getAnalysis<OptimizationRemarkEmitterWrapperPass>().getORE(); auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>(); LibInfo = TLIP ? &TLIP->getTLI(F) : nullptr; PreserveLCSSA = mustPreserveAnalysisID(LCSSAID); @@ -243,39 +201,31 @@ bool HardwareLoops::runOnFunction(Function &F) { // converted and the parent loop doesn't support containing a hardware loop. bool HardwareLoops::TryConvertLoop(Loop *L) { // Process nested loops first. - for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I) { - if (TryConvertLoop(*I)) { - reportHWLoopFailure("nested hardware-loops not supported", "HWLoopNested", - ORE, L); + for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I) + if (TryConvertLoop(*I)) return true; // Stop search. - } - } HardwareLoopInfo HWLoopInfo(L); - if (!HWLoopInfo.canAnalyze(*LI)) { - reportHWLoopFailure("cannot analyze loop, irreducible control flow", - "HWLoopCannotAnalyze", ORE, L); + if (!HWLoopInfo.canAnalyze(*LI)) return false; - } - if (!ForceHardwareLoops && - !TTI->isHardwareLoopProfitable(L, *SE, *AC, LibInfo, HWLoopInfo)) { - reportHWLoopFailure("it's not profitable to create a hardware-loop", - "HWLoopNotProfitable", ORE, L); - return false; - } + if (TTI->isHardwareLoopProfitable(L, *SE, *AC, LibInfo, HWLoopInfo) || + ForceHardwareLoops) { + + // Allow overriding of the counter width and loop decrement value. + if (CounterBitWidth.getNumOccurrences()) + HWLoopInfo.CountType = + IntegerType::get(M->getContext(), CounterBitWidth); - // Allow overriding of the counter width and loop decrement value. - if (CounterBitWidth.getNumOccurrences()) - HWLoopInfo.CountType = - IntegerType::get(M->getContext(), CounterBitWidth); + if (LoopDecrement.getNumOccurrences()) + HWLoopInfo.LoopDecrement = + ConstantInt::get(HWLoopInfo.CountType, LoopDecrement); - if (LoopDecrement.getNumOccurrences()) - HWLoopInfo.LoopDecrement = - ConstantInt::get(HWLoopInfo.CountType, LoopDecrement); + MadeChange |= TryConvertLoop(HWLoopInfo); + return MadeChange && (!HWLoopInfo.IsNestingLegal && !ForceNestedLoop); + } - MadeChange |= TryConvertLoop(HWLoopInfo); - return MadeChange && (!HWLoopInfo.IsNestingLegal && !ForceNestedLoop); + return false; } bool HardwareLoops::TryConvertLoop(HardwareLoopInfo &HWLoopInfo) { @@ -284,13 +234,8 @@ bool HardwareLoops::TryConvertLoop(HardwareLoopInfo &HWLoopInfo) { LLVM_DEBUG(dbgs() << "HWLoops: Try to convert profitable loop: " << *L); if (!HWLoopInfo.isHardwareLoopCandidate(*SE, *LI, *DT, ForceNestedLoop, - ForceHardwareLoopPHI)) { - // TODO: there can be many reasons a loop is not considered a - // candidate, so we should let isHardwareLoopCandidate fill in the - // reason and then report a better message here. - reportHWLoopFailure("loop is not a candidate", "HWLoopNoCandidate", ORE, L); + ForceHardwareLoopPHI)) return false; - } assert( (HWLoopInfo.ExitBlock && HWLoopInfo.ExitBranch && HWLoopInfo.ExitCount) && @@ -304,7 +249,7 @@ bool HardwareLoops::TryConvertLoop(HardwareLoopInfo &HWLoopInfo) { if (!Preheader) return false; - HardwareLoop HWLoop(HWLoopInfo, *SE, *DL, ORE); + HardwareLoop HWLoop(HWLoopInfo, *SE, *DL); HWLoop.Create(); ++NumHWLoops; return true; @@ -312,13 +257,10 @@ bool HardwareLoops::TryConvertLoop(HardwareLoopInfo &HWLoopInfo) { void HardwareLoop::Create() { LLVM_DEBUG(dbgs() << "HWLoops: Converting loop..\n"); - + Value *LoopCountInit = InitLoopCount(); - if (!LoopCountInit) { - reportHWLoopFailure("could not safely create a loop count expression", - "HWLoopNotSafe", ORE, L); + if (!LoopCountInit) return; - } InsertIterationSetup(LoopCountInit); |