25#include "llvm/ADT/SmallPtrSet.h"
26#include "llvm/IR/PassManager.h"
30using llvm::SmallPtrSet;
60 std::shared_ptr<isl_ctx>
Ctx;
125 void print(raw_ostream &O);
176 std::unique_ptr<IslAstInfo>
Ast;
IslAstInfo::IslAstUserPayload IslAstUserPayload
The accumulated dependence information for a SCoP.
void printScop(raw_ostream &OS, Scop &S) const override
Print a source code representation of the program.
void getAnalysisUsage(AnalysisUsage &AU) const override
Register all analyses and transformation required.
const IslAstInfo & getAI() const
void releaseMemory() override
Release the internal memory.
bool runOnScop(Scop &S) override
Build the AST for the given SCoP S.
std::unique_ptr< IslAstInfo > Ast
static bool isOutermostParallel(const isl::ast_node &Node)
Is this loop an outermost parallel loop?
static MemoryAccessSet * getBrokenReductions(const isl::ast_node &Node)
Get the nodes broken reductions or a nullptr if not available.
static bool isParallel(const isl::ast_node &Node)
Is this loop a parallel loop?
static isl::pw_aff getMinimalDependenceDistance(const isl::ast_node &Node)
Get minimal dependence distance or nullptr if not available.
static bool isInnermostParallel(const isl::ast_node &Node)
Is this loop an innermost parallel loop?
isl::ast_node getAst()
Return a copy of the AST root node.
SmallPtrSet< MemoryAccess *, 4 > MemoryAccessSet
static bool isExecutedInParallel(const isl::ast_node &Node)
Will the loop be run as thread parallel?
isl::ast_expr getRunCondition()
Get the run condition.
static bool isInnermost(const isl::ast_node &Node)
Is this loop an innermost loop?
static IslAstUserPayload * getNodePayload(const isl::ast_node &Node)
static isl::union_map getSchedule(const isl::ast_node &Node)
Get the nodes schedule or a nullptr if not available.
void print(raw_ostream &O)
IslAstInfo(Scop &S, const Dependences &D)
IslAst & getIslAst()
Return the isl AST computed by this IslAstInfo.
static isl::ast_build getBuild(const isl::ast_node &Node)
Get the nodes build context or a nullptr if not available.
static bool isReductionParallel(const isl::ast_node &Node)
Is this loop a reduction parallel loop?
const std::shared_ptr< isl_ctx > getSharedIslCtx() const
static isl::ast_expr buildRunCondition(Scop &S, const isl::ast_build &Build)
Build run-time condition for scop.
IslAst & operator=(const IslAst &)=delete
isl::ast_expr getRunCondition()
Get the run-time conditions for the Scop.
IslAst(const IslAst &)=delete
std::shared_ptr< isl_ctx > Ctx
static IslAst create(Scop &Scop, const Dependences &D)
IslAst & operator=(IslAst &&)=delete
isl::ast_expr RunCondition
void init(const Dependences &D)
This file contains the declaration of the PolyhedralInfo class, which will provide an interface to ex...
void initializeIslAstInfoPrinterLegacyPassPass(llvm::PassRegistry &)
void initializeIslAstInfoWrapperPassPass(llvm::PassRegistry &)
llvm::Pass * createIslAstInfoPrinterLegacyPass(llvm::raw_ostream &OS)
AnalysisManager< Scop, ScopStandardAnalysisResults & > ScopAnalysisManager
llvm::Pass * createIslAstInfoWrapperPassPass()
IslAstInfo run(Scop &S, ScopAnalysisManager &SAM, ScopStandardAnalysisResults &SAR)
bool IsInnermost
Flag to mark innermost loops.
bool IsOutermostParallel
Flag to mark outermost parallel loops.
bool IsParallel
Does the dependence analysis determine that there are no loop-carried dependencies?
MemoryAccessSet BrokenReductions
Set of accesses which break reduction dependences.
isl::pw_aff MinimalDependenceDistance
The minimal dependence distance for non parallel loops.
bool IsReductionParallel
Flag to mark parallel loops which break reductions.
IslAstUserPayload()=default
Construct and initialize the payload.
bool IsInnermostParallel
Flag to mark innermost parallel loops.
isl::ast_build Build
The build environment at the time this node was constructed.
IslAstPrinterPass(raw_ostream &OS)
PreservedAnalyses run(Scop &S, ScopAnalysisManager &SAM, ScopStandardAnalysisResults &, SPMUpdater &U)