forked from OSchip/llvm-project
LoopUtils.h - reduce AliasAnalysis.h include to forward declarations. NFC.
Fix implicit include dependencies in source files and replace legacy AliasAnalysis typedef with AAResults where necessary.
This commit is contained in:
parent
aec5344f48
commit
c18b753686
|
@ -14,7 +14,6 @@
|
|||
#define LLVM_TRANSFORMS_UTILS_LOOPUTILS_H
|
||||
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/Analysis/AliasAnalysis.h"
|
||||
#include "llvm/Analysis/IVDescriptors.h"
|
||||
#include "llvm/Analysis/TargetTransformInfo.h"
|
||||
#include "llvm/Transforms/Utils/ValueMapper.h"
|
||||
|
@ -23,6 +22,7 @@ namespace llvm {
|
|||
|
||||
template <typename T> class DomTreeNodeBase;
|
||||
using DomTreeNode = DomTreeNodeBase<BasicBlock>;
|
||||
class AAResults;
|
||||
class AliasSet;
|
||||
class AliasSetTracker;
|
||||
class BasicBlock;
|
||||
|
@ -117,11 +117,11 @@ struct SinkAndHoistLICMFlags {
|
|||
/// dominated by the specified block, and that are in the current loop) in
|
||||
/// reverse depth first order w.r.t the DominatorTree. This allows us to visit
|
||||
/// uses before definitions, allowing us to sink a loop body in one pass without
|
||||
/// iteration. Takes DomTreeNode, AliasAnalysis, LoopInfo, DominatorTree,
|
||||
/// iteration. Takes DomTreeNode, AAResults, LoopInfo, DominatorTree,
|
||||
/// TargetLibraryInfo, Loop, AliasSet information for all
|
||||
/// instructions of the loop and loop safety information as
|
||||
/// arguments. Diagnostics is emitted via \p ORE. It returns changed status.
|
||||
bool sinkRegion(DomTreeNode *, AliasAnalysis *, LoopInfo *, DominatorTree *,
|
||||
bool sinkRegion(DomTreeNode *, AAResults *, LoopInfo *, DominatorTree *,
|
||||
TargetLibraryInfo *, TargetTransformInfo *, Loop *,
|
||||
AliasSetTracker *, MemorySSAUpdater *, ICFLoopSafetyInfo *,
|
||||
SinkAndHoistLICMFlags &, OptimizationRemarkEmitter *);
|
||||
|
@ -130,11 +130,11 @@ bool sinkRegion(DomTreeNode *, AliasAnalysis *, LoopInfo *, DominatorTree *,
|
|||
/// dominated by the specified block, and that are in the current loop) in depth
|
||||
/// first order w.r.t the DominatorTree. This allows us to visit definitions
|
||||
/// before uses, allowing us to hoist a loop body in one pass without iteration.
|
||||
/// Takes DomTreeNode, AliasAnalysis, LoopInfo, DominatorTree,
|
||||
/// Takes DomTreeNode, AAResults, LoopInfo, DominatorTree,
|
||||
/// TargetLibraryInfo, Loop, AliasSet information for all instructions of the
|
||||
/// loop and loop safety information as arguments. Diagnostics is emitted via \p
|
||||
/// ORE. It returns changed status.
|
||||
bool hoistRegion(DomTreeNode *, AliasAnalysis *, LoopInfo *, DominatorTree *,
|
||||
bool hoistRegion(DomTreeNode *, AAResults *, LoopInfo *, DominatorTree *,
|
||||
TargetLibraryInfo *, Loop *, AliasSetTracker *,
|
||||
MemorySSAUpdater *, ScalarEvolution *, ICFLoopSafetyInfo *,
|
||||
SinkAndHoistLICMFlags &, OptimizationRemarkEmitter *);
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
#include "llvm/Analysis/LoopPass.h"
|
||||
#include "llvm/Analysis/ScalarEvolution.h"
|
||||
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
|
||||
#include "llvm/Analysis/TargetLibraryInfo.h"
|
||||
#include "llvm/Analysis/TargetTransformInfo.h"
|
||||
#include "llvm/CodeGen/TargetPassConfig.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
|
|
|
@ -153,7 +153,7 @@ static bool isSafeToExecuteUnconditionally(Instruction &Inst,
|
|||
const Instruction *CtxI = nullptr);
|
||||
static bool pointerInvalidatedByLoop(MemoryLocation MemLoc,
|
||||
AliasSetTracker *CurAST, Loop *CurLoop,
|
||||
AliasAnalysis *AA);
|
||||
AAResults *AA);
|
||||
static bool pointerInvalidatedByLoopWithMSSA(MemorySSA *MSSA, MemoryUse *MU,
|
||||
Loop *CurLoop,
|
||||
SinkAndHoistLICMFlags &Flags);
|
||||
|
@ -170,7 +170,7 @@ static void moveInstructionBefore(Instruction &I, Instruction &Dest,
|
|||
|
||||
namespace {
|
||||
struct LoopInvariantCodeMotion {
|
||||
bool runOnLoop(Loop *L, AliasAnalysis *AA, LoopInfo *LI, DominatorTree *DT,
|
||||
bool runOnLoop(Loop *L, AAResults *AA, LoopInfo *LI, DominatorTree *DT,
|
||||
TargetLibraryInfo *TLI, TargetTransformInfo *TTI,
|
||||
ScalarEvolution *SE, MemorySSA *MSSA,
|
||||
OptimizationRemarkEmitter *ORE);
|
||||
|
@ -185,9 +185,9 @@ private:
|
|||
unsigned LicmMssaNoAccForPromotionCap;
|
||||
|
||||
std::unique_ptr<AliasSetTracker>
|
||||
collectAliasInfoForLoop(Loop *L, LoopInfo *LI, AliasAnalysis *AA);
|
||||
collectAliasInfoForLoop(Loop *L, LoopInfo *LI, AAResults *AA);
|
||||
std::unique_ptr<AliasSetTracker>
|
||||
collectAliasInfoForLoopWithMSSA(Loop *L, AliasAnalysis *AA,
|
||||
collectAliasInfoForLoopWithMSSA(Loop *L, AAResults *AA,
|
||||
MemorySSAUpdater *MSSAU);
|
||||
};
|
||||
|
||||
|
@ -285,7 +285,7 @@ Pass *llvm::createLICMPass(unsigned LicmMssaOptCap,
|
|||
/// loop is not preserved so it is not a good idea to run LICM multiple
|
||||
/// times on one loop.
|
||||
bool LoopInvariantCodeMotion::runOnLoop(
|
||||
Loop *L, AliasAnalysis *AA, LoopInfo *LI, DominatorTree *DT,
|
||||
Loop *L, AAResults *AA, LoopInfo *LI, DominatorTree *DT,
|
||||
TargetLibraryInfo *TLI, TargetTransformInfo *TTI, ScalarEvolution *SE,
|
||||
MemorySSA *MSSA, OptimizationRemarkEmitter *ORE) {
|
||||
bool Changed = false;
|
||||
|
@ -448,7 +448,7 @@ bool LoopInvariantCodeMotion::runOnLoop(
|
|||
/// first order w.r.t the DominatorTree. This allows us to visit uses before
|
||||
/// definitions, allowing us to sink a loop body in one pass without iteration.
|
||||
///
|
||||
bool llvm::sinkRegion(DomTreeNode *N, AliasAnalysis *AA, LoopInfo *LI,
|
||||
bool llvm::sinkRegion(DomTreeNode *N, AAResults *AA, LoopInfo *LI,
|
||||
DominatorTree *DT, TargetLibraryInfo *TLI,
|
||||
TargetTransformInfo *TTI, Loop *CurLoop,
|
||||
AliasSetTracker *CurAST, MemorySSAUpdater *MSSAU,
|
||||
|
@ -751,7 +751,7 @@ public:
|
|||
/// order w.r.t the DominatorTree. This allows us to visit definitions before
|
||||
/// uses, allowing us to hoist a loop body in one pass without iteration.
|
||||
///
|
||||
bool llvm::hoistRegion(DomTreeNode *N, AliasAnalysis *AA, LoopInfo *LI,
|
||||
bool llvm::hoistRegion(DomTreeNode *N, AAResults *AA, LoopInfo *LI,
|
||||
DominatorTree *DT, TargetLibraryInfo *TLI, Loop *CurLoop,
|
||||
AliasSetTracker *CurAST, MemorySSAUpdater *MSSAU,
|
||||
ScalarEvolution *SE, ICFLoopSafetyInfo *SafetyInfo,
|
||||
|
@ -1108,11 +1108,11 @@ bool llvm::canSinkOrHoistInst(Instruction &I, AAResults *AA, DominatorTree *DT,
|
|||
FunctionModRefBehavior Behavior = AA->getModRefBehavior(CI);
|
||||
if (Behavior == FMRB_DoesNotAccessMemory)
|
||||
return true;
|
||||
if (AliasAnalysis::onlyReadsMemory(Behavior)) {
|
||||
if (AAResults::onlyReadsMemory(Behavior)) {
|
||||
// A readonly argmemonly function only reads from memory pointed to by
|
||||
// it's arguments with arbitrary offsets. If we can prove there are no
|
||||
// writes to this memory in the loop, we can hoist or sink.
|
||||
if (AliasAnalysis::onlyAccessesArgPointees(Behavior)) {
|
||||
if (AAResults::onlyAccessesArgPointees(Behavior)) {
|
||||
// TODO: expand to writeable arguments
|
||||
for (Value *Op : CI->arg_operands())
|
||||
if (Op->getType()->isPointerTy()) {
|
||||
|
@ -2120,7 +2120,7 @@ bool llvm::promoteLoopAccessesToScalars(
|
|||
/// from L and all subloops of L.
|
||||
std::unique_ptr<AliasSetTracker>
|
||||
LoopInvariantCodeMotion::collectAliasInfoForLoop(Loop *L, LoopInfo *LI,
|
||||
AliasAnalysis *AA) {
|
||||
AAResults *AA) {
|
||||
auto CurAST = std::make_unique<AliasSetTracker>(*AA);
|
||||
|
||||
// Add everything from all the sub loops.
|
||||
|
@ -2138,7 +2138,7 @@ LoopInvariantCodeMotion::collectAliasInfoForLoop(Loop *L, LoopInfo *LI,
|
|||
|
||||
std::unique_ptr<AliasSetTracker>
|
||||
LoopInvariantCodeMotion::collectAliasInfoForLoopWithMSSA(
|
||||
Loop *L, AliasAnalysis *AA, MemorySSAUpdater *MSSAU) {
|
||||
Loop *L, AAResults *AA, MemorySSAUpdater *MSSAU) {
|
||||
auto *MSSA = MSSAU->getMemorySSA();
|
||||
auto CurAST = std::make_unique<AliasSetTracker>(*AA, MSSA, L);
|
||||
CurAST->addAllInstructionsInLoopUsingMSSA();
|
||||
|
@ -2147,7 +2147,7 @@ LoopInvariantCodeMotion::collectAliasInfoForLoopWithMSSA(
|
|||
|
||||
static bool pointerInvalidatedByLoop(MemoryLocation MemLoc,
|
||||
AliasSetTracker *CurAST, Loop *CurLoop,
|
||||
AliasAnalysis *AA) {
|
||||
AAResults *AA) {
|
||||
// First check to see if any of the basic blocks in CurLoop invalidate *V.
|
||||
bool isInvalidatedAccordingToAST = CurAST->getAliasSetFor(MemLoc).isMod();
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "llvm/Analysis/AssumptionCache.h"
|
||||
#include "llvm/Analysis/LoopInfo.h"
|
||||
#include "llvm/Analysis/ScalarEvolution.h"
|
||||
#include "llvm/Analysis/TargetLibraryInfo.h"
|
||||
#include "llvm/AsmParser/Parser.h"
|
||||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/Support/SourceMgr.h"
|
||||
|
|
Loading…
Reference in New Issue