Polly 20.0.0git
Classes | Namespaces | Typedefs | Enumerations | Functions
ScopHelper.h File Reference
#include "llvm/ADT/SetVector.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/ValueHandle.h"
#include "isl/isl-noexceptions.h"
#include <optional>

Go to the source code of this file.

Classes

struct  polly::Assumption
 Helper struct to remember assumptions. More...
 
class  polly::MemAccInst
 Utility proxy to wrap the common members of LoadInst and StoreInst. More...
 
struct  llvm::simplify_type< polly::MemAccInst >
 Specialize simplify_type for MemAccInst to enable dyn_cast and cast from a MemAccInst object. More...
 
struct  polly::BandAttr
 Represent the attributes of a loop. More...
 

Namespaces

namespace  llvm
 This file contains the declaration of the PolyhedralInfo class, which will provide an interface to expose polyhedral analysis information of Polly.
 
namespace  polly
 

Typedefs

using polly::LoopToScevMapT = llvm::DenseMap< const llvm::Loop *, const llvm::SCEV * >
 Same as llvm/Analysis/ScalarEvolutionExpressions.h.
 
using polly::RecordedAssumptionsTy = llvm::SmallVector< Assumption, 8 >
 
using polly::ValueMapT = llvm::DenseMap< llvm::AssertingVH< llvm::Value >, llvm::AssertingVH< llvm::Value > >
 Type to remap values.
 
using polly::InvariantLoadsSetTy = llvm::SetVector< llvm::AssertingVH< llvm::LoadInst > >
 Type for a set of invariant loads.
 
using polly::ParameterSetTy = llvm::SetVector< const llvm::SCEV * >
 Set type for parameters.
 
using polly::BoxedLoopsSetTy = llvm::SetVector< const llvm::Loop * >
 Set of loops (used to remember loops in non-affine subregions).
 

Enumerations

enum  polly::AssumptionKind {
  polly::ALIASING , polly::INBOUNDS , polly::WRAPPING , polly::UNSIGNED ,
  polly::PROFITABLE , polly::ERRORBLOCK , polly::COMPLEXITY , polly::INFINITELOOP ,
  polly::INVARIANTLOAD , polly::DELINEARIZATION
}
 Enumeration of assumptions Polly can take. More...
 
enum  polly::AssumptionSign { polly::AS_ASSUMPTION , polly::AS_RESTRICTION }
 Enum to distinguish between assumptions and restrictions. More...
 

Functions

void polly::recordAssumption (RecordedAssumptionsTy *RecordedAssumptions, AssumptionKind Kind, isl::set Set, llvm::DebugLoc Loc, AssumptionSign Sign, llvm::BasicBlock *BB=nullptr, bool RTC=true)
 Record an assumption for later addition to the assumed context.
 
void polly::simplifyRegion (llvm::Region *R, llvm::DominatorTree *DT, llvm::LoopInfo *LI, llvm::RegionInfo *RI)
 Simplify the region to have a single unconditional entry edge and a single exit edge.
 
void polly::splitEntryBlockForAlloca (llvm::BasicBlock *EntryBlock, llvm::Pass *P)
 Split the entry block of a function to store the newly inserted allocations outside of all Scops.
 
void polly::splitEntryBlockForAlloca (llvm::BasicBlock *EntryBlock, llvm::DominatorTree *DT, llvm::LoopInfo *LI, llvm::RegionInfo *RI)
 Split the entry block of a function to store the newly inserted allocations outside of all Scops.
 
llvm::Value * polly::expandCodeFor (Scop &S, llvm::ScalarEvolution &SE, llvm::Function *GenFn, llvm::ScalarEvolution &GenSE, const llvm::DataLayout &DL, const char *Name, const llvm::SCEV *E, llvm::Type *Ty, llvm::Instruction *IP, ValueMapT *VMap, LoopToScevMapT *LoopMap, llvm::BasicBlock *RTCBB)
 Wrapper for SCEVExpander extended to all Polly features.
 
llvm::Value * polly::getConditionFromTerminator (llvm::Instruction *TI)
 Return the condition for the terminator TI.
 
llvm::Loop * polly::getLoopSurroundingScop (Scop &S, llvm::LoopInfo &LI)
 Get the smallest loop that contains S but is not in S.
 
unsigned polly::getNumBlocksInLoop (llvm::Loop *L)
 Get the number of blocks in L.
 
unsigned polly::getNumBlocksInRegionNode (llvm::RegionNode *RN)
 Get the number of blocks in RN.
 
llvm::Loop * polly::getRegionNodeLoop (llvm::RegionNode *RN, llvm::LoopInfo &LI)
 Return the smallest loop surrounding RN.
 
bool polly::isHoistableLoad (llvm::LoadInst *LInst, llvm::Region &R, llvm::LoopInfo &LI, llvm::ScalarEvolution &SE, const llvm::DominatorTree &DT, const InvariantLoadsSetTy &KnownInvariantLoads)
 Check if LInst can be hoisted in R.
 
bool polly::isIgnoredIntrinsic (const llvm::Value *V)
 Return true iff V is an intrinsic that we ignore during code generation.
 
bool polly::canSynthesize (const llvm::Value *V, const Scop &S, llvm::ScalarEvolution *SE, llvm::Loop *Scope)
 Check whether a value an be synthesized by the code generator.
 
llvm::BasicBlock * polly::getUseBlock (const llvm::Use &U)
 Return the block in which a value is used.
 
llvm::Loop * polly::getFirstNonBoxedLoopFor (llvm::Loop *L, llvm::LoopInfo &LI, const BoxedLoopsSetTy &BoxedLoops)
 
llvm::Loop * polly::getFirstNonBoxedLoopFor (llvm::BasicBlock *BB, llvm::LoopInfo &LI, const BoxedLoopsSetTy &BoxedLoops)
 
bool polly::isDebugCall (llvm::Instruction *Inst)
 Is the given instruction a call to a debug function?
 
bool polly::hasDebugCall (ScopStmt *Stmt)
 Does the statement contain a call to a debug function?
 
std::optional< llvm::Metadata * > polly::findMetadataOperand (llvm::MDNode *LoopMD, llvm::StringRef Name)
 Find a property value in a LoopID.
 
bool polly::getBooleanLoopAttribute (llvm::MDNode *LoopID, llvm::StringRef Name)
 Find a boolean property value in a LoopID.
 
std::optional< int > polly::getOptionalIntLoopAttribute (llvm::MDNode *LoopID, llvm::StringRef Name)
 Find an integers property value in a LoopID.
 
bool polly::hasDisableAllTransformsHint (llvm::Loop *L)
 Does the loop's LoopID contain a 'llvm.loop.disable_heuristics' property?
 
bool polly::hasDisableAllTransformsHint (llvm::MDNode *LoopID)
 
isl::id polly::getIslLoopAttr (isl::ctx Ctx, BandAttr *Attr)
 Get an isl::id representing a loop.
 
isl::id polly::createIslLoopAttr (isl::ctx Ctx, llvm::Loop *L)
 Create an isl::id that identifies an original loop.
 
bool polly::isLoopAttr (const isl::id &Id)
 Is Id representing a loop?
 
BandAttrpolly::getLoopAttr (const isl::id &Id)
 Return the BandAttr of a loop's isl::id.