mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
[LIR] Make the LoopIdiomRecognize pass get analyses essentially the same
way as every other pass. This simplifies the code quite a bit and is also more idiomatic! <ba-dum!> llvm-svn: 244853
This commit is contained in:
parent
3d8b7669f2
commit
adb2df90fa
@ -78,10 +78,6 @@ public:
|
||||
static char ID;
|
||||
explicit LoopIdiomRecognize() : LoopPass(ID) {
|
||||
initializeLoopIdiomRecognizePass(*PassRegistry::getPassRegistry());
|
||||
DT = nullptr;
|
||||
SE = nullptr;
|
||||
TLI = nullptr;
|
||||
TTI = nullptr;
|
||||
}
|
||||
|
||||
bool runOnLoop(Loop *L, LPPassManager &LPM) override;
|
||||
@ -106,30 +102,6 @@ public:
|
||||
AU.addRequired<TargetTransformInfoWrapperPass>();
|
||||
}
|
||||
|
||||
DominatorTree *getDominatorTree() {
|
||||
return DT ? DT
|
||||
: (DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree());
|
||||
}
|
||||
|
||||
ScalarEvolution *getScalarEvolution() {
|
||||
return SE ? SE : (SE = &getAnalysis<ScalarEvolution>());
|
||||
}
|
||||
|
||||
TargetLibraryInfo *getTargetLibraryInfo() {
|
||||
if (!TLI)
|
||||
TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
|
||||
return TLI;
|
||||
}
|
||||
|
||||
const TargetTransformInfo *getTargetTransformInfo() {
|
||||
return TTI ? TTI
|
||||
: (TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
|
||||
*CurLoop->getHeader()->getParent()));
|
||||
}
|
||||
|
||||
Loop *getLoop() const { return CurLoop; }
|
||||
|
||||
private:
|
||||
/// \name Countable Loop Idiom Handling
|
||||
/// @{
|
||||
@ -205,7 +177,6 @@ bool LoopIdiomRecognize::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
return false;
|
||||
|
||||
CurLoop = L;
|
||||
|
||||
// If the loop could not be converted to canonical form, it must have an
|
||||
// indirectbr in it, just give up.
|
||||
if (!L->getLoopPreheader())
|
||||
@ -216,9 +187,15 @@ bool LoopIdiomRecognize::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
if (Name == "memset" || Name == "memcpy")
|
||||
return false;
|
||||
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
TTI = &getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
|
||||
*CurLoop->getHeader()->getParent());
|
||||
|
||||
if (SE->hasLoopInvariantBackedgeTakenCount(L))
|
||||
return runOnCountableLoop();
|
||||
|
||||
return runOnNoncountableLoop();
|
||||
}
|
||||
|
||||
@ -234,14 +211,7 @@ bool LoopIdiomRecognize::runOnCountableLoop() {
|
||||
if (BECst->getValue()->getValue() == 0)
|
||||
return false;
|
||||
|
||||
// set DT
|
||||
(void)getDominatorTree();
|
||||
|
||||
LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
|
||||
// set TLI
|
||||
(void)getTargetLibraryInfo();
|
||||
|
||||
SmallVector<BasicBlock *, 8> ExitBlocks;
|
||||
CurLoop->getUniqueExitBlocks(ExitBlocks);
|
||||
@ -852,10 +822,6 @@ static bool detectPopcountIdiom(Loop *CurLoop, BasicBlock *PreCondBB,
|
||||
/// If detected, transforms the relevant code to issue the popcount intrinsic
|
||||
/// function call, and returns true; otherwise, returns false.
|
||||
bool LoopIdiomRecognize::recognizePopcount() {
|
||||
(void)getScalarEvolution();
|
||||
(void)getTargetLibraryInfo();
|
||||
(void)getTargetTransformInfo();
|
||||
|
||||
if (TTI->getPopcntSupport(32) != TargetTransformInfo::PSK_FastHardware)
|
||||
return false;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user