Polly 20.0.0git
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
polly::IslNodeBuilder Class Reference

#include <IslNodeBuilder.h>

Public Member Functions

 IslNodeBuilder (PollyIRBuilder &Builder, ScopAnnotator &Annotator, const DataLayout &DL, LoopInfo &LI, ScalarEvolution &SE, DominatorTree &DT, Scop &S, BasicBlock *StartBlock)
 
virtual ~IslNodeBuilder ()=default
 
void addParameters (__isl_take isl_set *Context)
 
Value * createRTC (isl_ast_expr *Condition)
 Generate code that evaluates Condition at run-time.
 
void create (__isl_take isl_ast_node *Node)
 
void allocateNewArrays (BBPair StartExitBlocks)
 Allocate memory for all new arrays created by Polly.
 
bool preloadInvariantLoads ()
 Preload all memory loads that are invariant.
 
virtual void finalize ()
 Finalize code generation.
 
IslExprBuildergetExprBuilder ()
 
BlockGeneratorgetBlockGenerator ()
 Get the associated block generator.
 
const ArrayRef< Function * > getParallelSubfunctions () const
 Return the parallel subfunctions that have been created.
 

Protected Member Functions

Value * generateSCEV (const SCEV *Expr)
 Generate code for a given SCEV*.
 
bool materializeValue (__isl_take isl_id *Id)
 Materialize code for Id if it was not done before.
 
bool materializeParameters (__isl_take isl_set *Set)
 Materialize parameters of Set.
 
bool materializeParameters ()
 Materialize all parameters in the current scop.
 
isl::ast_expr getUpperBound (isl::ast_node_for For, CmpInst::Predicate &Predicate)
 
int getNumberOfIterations (isl::ast_node_for For)
 Return non-negative number of iterations in case of the following form of a loop and -1 otherwise.
 
void getReferencesInSubtree (const isl::ast_node &For, SetVector< Value * > &Values, SetVector< const Loop * > &Loops)
 Compute the values and loops referenced in this subtree.
 
Value * getLatestValue (Value *Original) const
 Return the most up-to-date version of the llvm::Value for code generation.
 
virtual void createMark (__isl_take isl_ast_node *Marker)
 Generate code for a marker now.
 
virtual void createFor (__isl_take isl_ast_node *For)
 
Value * preloadUnconditionally (__isl_take isl_set *AccessRange, isl_ast_build *Build, Instruction *AccInst)
 Preload the memory access at AccessRange with Build.
 
Value * preloadInvariantLoad (const MemoryAccess &MA, __isl_take isl_set *Domain)
 Preload the memory load access MA.
 
bool preloadInvariantEquivClass (InvariantEquivClassTy &IAClass)
 Preload the invariant access equivalence class IAClass.
 
void createForSequential (isl::ast_node_for For, bool MarkParallel)
 
void createForParallel (__isl_take isl_ast_node *For)
 Create LLVM-IR that executes a for node thread parallel.
 
__isl_give isl_id_to_ast_expr * createNewAccesses (ScopStmt *Stmt, __isl_keep isl_ast_node *Node)
 Create new access functions for modified memory accesses.
 
void createSubstitutions (__isl_take isl_ast_expr *Expr, ScopStmt *Stmt, LoopToScevMapT &LTS)
 Generate LLVM-IR that computes the values of the original induction variables in function of the newly generated loop induction variables.
 
void createSubstitutionsVector (__isl_take isl_ast_expr *Expr, ScopStmt *Stmt, std::vector< LoopToScevMapT > &VLTS, std::vector< Value * > &IVS, __isl_take isl_id *IteratorID)
 
virtual void createIf (__isl_take isl_ast_node *If)
 
virtual void createUser (__isl_take isl_ast_node *User)
 
virtual void createBlock (__isl_take isl_ast_node *Block)
 
virtual isl::union_map getScheduleForAstNode (const isl::ast_node &Node)
 Get the schedule for a given AST node.
 

Protected Attributes

ScopS
 
PollyIRBuilderBuilder
 
ScopAnnotatorAnnotator
 
IslExprBuilder ExprBuilder
 
BlockGenerator BlockGen
 The generator used to copy a basic block.
 
RegionGenerator RegionGen
 The generator used to copy a non-affine region.
 
const DataLayout & DL
 
LoopInfo & LI
 
ScalarEvolution & SE
 
DominatorTree & DT
 
BasicBlock * StartBlock
 
MapVector< const Loop *, const SCEV * > OutsideLoopIterations
 The current iteration of out-of-scop loops.
 
IslExprBuilder::IDToValueTy IDToValue
 
SmallVector< Function *, 8 > ParallelSubfunctions
 A collection of all parallel subfunctions that have been created.
 
ValueMapT ValueMap
 A set of Value -> Value remappings to apply when generating new code.
 
SmallSet< std::pair< const SCEV *, Type * >, 16 > PreloadedPtrs
 Set to remember materialized invariant loads.
 
BlockGenerator::AllocaMapTy ScalarMap
 Maps used by the block and region generator to demote scalars.
 
BlockGenerator::EscapeUsersAllocaMapTy EscapeMap
 See BlockGenerator::EscapeMap.
 
DominatorTree * GenDT
 Relates to the region where the code is emitted into.
 
LoopInfo * GenLI
 
ScalarEvolution * GenSE
 

Private Member Functions

void generateCopyStmt (ScopStmt *Stmt, __isl_keep isl_id_to_ast_expr *NewAccesses)
 Create code for a copy statement.
 
Value * materializeNonScopLoopInductionVariable (const Loop *L)
 Materialize a canonical loop induction variable for L, which is a loop that is not present in the Scop.
 

Detailed Description

Definition at line 64 of file IslNodeBuilder.h.

Constructor & Destructor Documentation

◆ IslNodeBuilder()

polly::IslNodeBuilder::IslNodeBuilder ( PollyIRBuilder Builder,
ScopAnnotator Annotator,
const DataLayout &  DL,
LoopInfo &  LI,
ScalarEvolution &  SE,
DominatorTree &  DT,
Scop S,
BasicBlock *  StartBlock 
)
inline

Definition at line 66 of file IslNodeBuilder.h.

◆ ~IslNodeBuilder()

virtual polly::IslNodeBuilder::~IslNodeBuilder ( )
virtualdefault

References polly::Value.

Member Function Documentation

◆ addParameters()

void IslNodeBuilder::addParameters ( __isl_take isl_set Context)

◆ allocateNewArrays()

void IslNodeBuilder::allocateNewArrays ( BBPair  StartExitBlocks)

Allocate memory for all new arrays created by Polly.

Definition at line 1284 of file IslNodeBuilder.cpp.

References assert, Builder, Ctx, DL, and PollyTargetFirstLevelCacheLineSize().

Referenced by generateCode().

◆ create()

void IslNodeBuilder::create ( __isl_take isl_ast_node Node)

◆ createBlock()

void IslNodeBuilder::createBlock ( __isl_take isl_ast_node Block)
protectedvirtual

Definition at line 919 of file IslNodeBuilder.cpp.

References create(), isl_ast_node_block_get_children(), and isl_ast_node_free().

Referenced by create().

◆ createFor()

void IslNodeBuilder::createFor ( __isl_take isl_ast_node For)
protectedvirtual

◆ createForParallel()

void IslNodeBuilder::createForParallel ( __isl_take isl_ast_node For)
protected

◆ createForSequential()

void IslNodeBuilder::createForSequential ( isl::ast_node_for  For,
bool  MarkParallel 
)
protected

◆ createIf()

void IslNodeBuilder::createIf ( __isl_take isl_ast_node If)
protectedvirtual

◆ createMark()

void IslNodeBuilder::createMark ( __isl_take isl_ast_node Marker)
protectedvirtual

Generate code for a marker now.

For mark nodes with an unknown name, we just forward the code generation to its child. This is currently the only behavior implemented, as there is currently not special handling for marker nodes implemented.

Parameters
MarkThe node we generate code for.

Definition at line 380 of file IslNodeBuilder.cpp.

References Annotator, assert, create(), createForSequential(), polly::getLoopAttr(), polly::ScopAnnotator::getStagingAttrEnv(), isl_ast_node_for, isl_ast_node_free(), isl_ast_node_get_type(), isl_ast_node_mark_get_id(), isl_ast_node_mark_get_node(), isl_id_free(), isl_id_get_name(), isl::manage(), and isl::manage_copy().

Referenced by create().

◆ createNewAccesses()

__isl_give isl_id_to_ast_expr * IslNodeBuilder::createNewAccesses ( ScopStmt Stmt,
__isl_keep isl_ast_node Node 
)
protected

Create new access functions for modified memory accesses.

In case the access function of one of the memory references in the Stmt has been modified, we generate a new isl_ast_expr that reflects the newly modified access function and return a map that maps from the individual memory references in the statement (identified by their id) to these newly generated ast expressions.

Parameters
StmtThe statement for which to (possibly) generate new access functions.
NodeThe ast node corresponding to the statement for us to extract the local schedule from.
Returns
A new hash table that contains remappings from memory ids to new access expressions.

Definition at line 757 of file IslNodeBuilder.cpp.

References isl::ast_build::access_from(), isl::id_to_ast_expr::alloc(), assert, isl::pw_multi_aff::domain(), isl::union_map::domain(), isl::ast_build::get_schedule(), polly::IslAstInfo::getBuild(), polly::Scop::getContext(), polly::ScopStmt::getDomain(), polly::Scop::getIslCtx(), polly::ScopStmt::getParent(), polly::Scop::getRegion(), isl::set::intersect_params(), isl::set::is_empty(), isl::ast_build::is_null(), isl_map_domain(), isl_set_free(), isl_set_from_union_set(), isl_set_intersect_params(), isl_set_is_subset(), isl::manage_copy(), PollyGenerateExpressions(), isl::id_to_ast_expr::release(), isl::set::release(), isl::union_set::release(), isl::id_to_ast_expr::set(), and polly::ScopStmt::setAstBuild().

Referenced by createUser().

◆ createRTC()

Value * IslNodeBuilder::createRTC ( isl_ast_expr Condition)

Generate code that evaluates Condition at run-time.

The AST expression we generate to perform the run-time check assumes computations on integer types of infinite size.

This function is typically called to generate the LLVM-IR for the run-time condition of the scop, that verifies that all the optimistic assumptions we have taken during scop modeling and transformation hold at run-time.

Parameters
ConditionThe condition to evaluate
Returns
An llvm::Value that is true if the condition holds and false otherwise.

As we only use 64-bit arithmetic we check for overflows, in case of which we set the result of this run-time check to false to be conservatively correct,

Definition at line 1414 of file IslNodeBuilder.cpp.

References Builder, polly::IslExprBuilder::create(), polly::RuntimeDebugBuilder::createCPUPrinter(), ExprBuilder, getExprBuilder(), polly::IslExprBuilder::getOverflowState(), polly::IslExprBuilder::hasLargeInts(), isl_ast_expr_free(), isl::manage_copy(), PollyGenerateRTCPrint(), polly::IslExprBuilder::setTrackOverflow(), and polly::Value.

Referenced by generateCode().

◆ createSubstitutions()

void IslNodeBuilder::createSubstitutions ( __isl_take isl_ast_expr Expr,
ScopStmt Stmt,
LoopToScevMapT LTS 
)
protected

Generate LLVM-IR that computes the values of the original induction variables in function of the newly generated loop induction variables.

Example:

// Original for i for j S(i)

Schedule: [i,j] -> [i+j, j]

// New for c0 for c1 S(c0 - c1, c1)

Assuming the original code consists of two loops which are transformed according to a schedule [i,j] -> [c0=i+j,c1=j]. The resulting ast models the original statement as a call expression where each argument is an expression that computes the old induction variables from the new ones, ordered such that the first argument computes the value of induction variable that was outermost in the original code.

Parameters
ExprThe call expression that represents the statement.
StmtThe statement that is called.
LTSThe loop to SCEV map in which the mapping from the original loop to a SCEV representing the new loop iv is added. This mapping does not require an explicit induction variable. Instead, we think in terms of an implicit induction variable that counts the number of times a loop is executed. For each original loop this count, expressed in function of the new induction variables, is added to the LTS map.

Definition at line 822 of file IslNodeBuilder.cpp.

References assert, polly::IslExprBuilder::create(), ExprBuilder, polly::ScopStmt::getLoopForDimension(), polly::ScopStmt::getParent(), polly::Scop::getSE(), isl_ast_expr_free(), isl_ast_expr_get_op_arg(), isl_ast_expr_get_op_n_arg(), isl_ast_expr_get_op_type(), isl_ast_expr_get_type(), isl_ast_expr_op, isl_ast_op_call, SE, and polly::Value.

Referenced by createSubstitutionsVector(), and createUser().

◆ createSubstitutionsVector()

void IslNodeBuilder::createSubstitutionsVector ( __isl_take isl_ast_expr Expr,
ScopStmt Stmt,
std::vector< LoopToScevMapT > &  VLTS,
std::vector< Value * > &  IVS,
__isl_take isl_id IteratorID 
)
protected

◆ createUser()

void IslNodeBuilder::createUser ( __isl_take isl_ast_node User)
protectedvirtual

◆ finalize()

virtual void polly::IslNodeBuilder::finalize ( )
inlinevirtual

Finalize code generation.

See also
BlockGenerator::finalizeSCoP(Scop &S)

Definition at line 105 of file IslNodeBuilder.h.

References BlockGen, and polly::BlockGenerator::finalizeSCoP().

Referenced by generateCode().

◆ generateCopyStmt()

void IslNodeBuilder::generateCopyStmt ( ScopStmt Stmt,
__isl_keep isl_id_to_ast_expr *  NewAccesses 
)
private

Create code for a copy statement.

A copy statement is expected to have one read memory access and one write memory access (in this very order). Data is loaded from the location described by the read memory access and written to the location described by the write memory access. NewAccesses contains for each access the isl ast expression that describes the location accessed.

Parameters
StmtThe copy statement that contains the accesses.
NewAccessesThe hash table that contains remappings from memory ids to new access expressions.

Definition at line 859 of file IslNodeBuilder.cpp.

References assert, polly::ScopStmt::begin(), Builder, polly::IslExprBuilder::create(), polly::IslExprBuilder::createAccessAddress(), ExprBuilder, and polly::ScopStmt::size().

Referenced by createUser().

◆ generateSCEV()

Value * IslNodeBuilder::generateSCEV ( const SCEV *  Expr)
protected

Generate code for a given SCEV*.

This function generates code for a given SCEV expression. It generated code is emitted at the end of the basic block our Builder currently points to and the resulting value is returned.

Parameters
ExprThe expression to code generate.

We pass the insert location of our Builder, as Polly ensures during IR generation that there is always a valid CFG into which instructions are inserted. As a result, the insertpoint is known to be always followed by a terminator instruction. This means the insert point may be specified by a terminator instruction, but it can never point to an ->end() iterator which does not have a corresponding instruction. Hence, dereferencing the insertpoint to obtain an instruction is known to be save.

We also do not need to update the Builder here, as new instructions are always inserted before the given InsertLocation. As a result, the insert location remains valid.

Definition at line 1388 of file IslNodeBuilder.cpp.

References assert, Builder, DL, polly::expandCodeFor(), GenSE, SE, StartBlock, polly::Value, and ValueMap.

Referenced by materializeNonScopLoopInductionVariable(), and materializeValue().

◆ getBlockGenerator()

BlockGenerator & polly::IslNodeBuilder::getBlockGenerator ( )
inline

Get the associated block generator.

Returns
A reference to the associated block generator.

Definition at line 112 of file IslNodeBuilder.h.

References BlockGen.

Referenced by getReferencesInSubtree().

◆ getExprBuilder()

IslExprBuilder & polly::IslNodeBuilder::getExprBuilder ( )
inline

Definition at line 107 of file IslNodeBuilder.h.

References ExprBuilder.

Referenced by createRTC().

◆ getLatestValue()

Value * IslNodeBuilder::getLatestValue ( Value *  Original) const
protected

Return the most up-to-date version of the llvm::Value for code generation.

Parameters
OriginalThe Value to check for an up to date version.
Returns
A remapped Value from ValueMap, or Original if no mapping exists.
See also
IslNodeBuilder::updateValues
IslNodeBuilder::ValueMap

Definition at line 373 of file IslNodeBuilder.cpp.

References polly::Value, and ValueMap.

Referenced by getReferencesInSubtree().

◆ getNumberOfIterations()

int IslNodeBuilder::getNumberOfIterations ( isl::ast_node_for  For)
protected

Return non-negative number of iterations in case of the following form of a loop and -1 otherwise.

for (i = 0; i <= NumIter; i++) { loop body; }

NumIter is a non-negative integer value. Condition can have isl_ast_op_lt type.

Definition at line 152 of file IslNodeBuilder.cpp.

References isl::ast_node::as(), assert, isl::ast_node_for::body(), isl::ast_node_block::children(), isl::ast_node::get(), isl::val::get_num_si(), isl::ast_expr::get_val(), getUpperBound(), isl::ast_node_for::inc(), isl::ast_node_for::init(), isl::val::is_one(), isl::val::is_zero(), isl::ast_expr::isa(), isl_ast_node_block, isl_ast_node_for, isl_ast_node_get_type(), isl_ast_node_user, and isl::ast_expr::val().

◆ getParallelSubfunctions()

const ArrayRef< Function * > polly::IslNodeBuilder::getParallelSubfunctions ( ) const
inline

Return the parallel subfunctions that have been created.

Definition at line 115 of file IslNodeBuilder.h.

References ParallelSubfunctions.

Referenced by generateCode().

◆ getReferencesInSubtree()

void IslNodeBuilder::getReferencesInSubtree ( const isl::ast_node For,
SetVector< Value * > &  Values,
SetVector< const Loop * > &  Loops 
)
protected

Compute the values and loops referenced in this subtree.

This function looks at all ScopStmts scheduled below the provided For node and finds the llvm::Value[s] and llvm::Loops[s] which are referenced but not locally defined.

Values that can be synthesized or that are available as globals are considered locally defined.

Loops that contain the scop or that are part of the scop are considered locally defined. Loops that are before the scop, but do not contain the scop itself are considered not locally defined.

Parameters
ForThe node defining the subtree.
ValuesA vector that will be filled with the Values referenced in this subtree.
LoopsA vector that will be filled with the Loops referenced in this subtree.

Note: Code generation of induction variables of loops outside Scops

Remove loops that contain the scop or that are part of the scop, as they are considered local. This leaves only loops that are before the scop, but do not contain the scop itself. We ignore loops perfectly contained in the Scop because these are already generated at IslNodeBuilder::addParameters. These Loops are loops whose induction variables are referred to by the Scop, but the Scop is not fully contained in these Loops. Since there can be many of these, we choose to codegen these on-demand.

See also
IslNodeBuilder::materializeNonScopLoopInductionVariable.

Definition at line 321 of file IslNodeBuilder.cpp.

References addReferencesFromStmtUnionSet(), isl::union_map::domain(), polly::findLoops(), polly::findValues(), getBlockGenerator(), getLatestValue(), getScheduleForAstNode(), IDToValue, LI, OutsideLoopIterations, S, SE, polly::Value, and ValueMap.

Referenced by createForParallel().

◆ getScheduleForAstNode()

isl::union_map IslNodeBuilder::getScheduleForAstNode ( const isl::ast_node Node)
protectedvirtual

Get the schedule for a given AST node.

This information is used to reason about parallelism of loops or the locality of memory accesses under a given schedule.

Parameters
NodeThe node we want to obtain the schedule for.
Returns
Return an isl_union_map that maps from the statements executed below this ast node to the scheduling vectors used to enumerate them.

Definition at line 317 of file IslNodeBuilder.cpp.

References polly::IslAstInfo::getSchedule().

Referenced by getReferencesInSubtree().

◆ getUpperBound()

isl::ast_expr IslNodeBuilder::getUpperBound ( isl::ast_node_for  For,
CmpInst::Predicate &  Predicate 
)
protected

◆ materializeNonScopLoopInductionVariable()

Value * IslNodeBuilder::materializeNonScopLoopInductionVariable ( const Loop *  L)
private

Materialize a canonical loop induction variable for L, which is a loop that is not present in the Scop.

Note that this is materialized at the point where the Builder is currently pointing. We also populate the OutsideLoopIterations map with Ls SCEV to keep track of the induction variable. See [Code generation of induction variables of loops outside Scops]

Definition at line 877 of file IslNodeBuilder.cpp.

References assert, Builder, generateSCEV(), OutsideLoopIterations, SE, and polly::Value.

Referenced by addParameters(), and createForParallel().

◆ materializeParameters() [1/2]

bool IslNodeBuilder::materializeParameters ( )
protected

Materialize all parameters in the current scop.

Returns
False, iff a problem occurred and the value was not materialized.

Definition at line 1028 of file IslNodeBuilder.cpp.

References materializeValue().

Referenced by addParameters(), and preloadInvariantLoad().

◆ materializeParameters() [2/2]

bool IslNodeBuilder::materializeParameters ( __isl_take isl_set Set)
protected

Materialize parameters of Set.

Returns
False, iff a problem occurred and the value was not materialized.

Definition at line 1017 of file IslNodeBuilder.cpp.

References isl_dim_param, isl_set_dim(), isl_set_get_dim_id(), isl_set_involves_dims(), and materializeValue().

◆ materializeValue()

bool IslNodeBuilder::materializeValue ( __isl_take isl_id Id)
protected

Materialize code for Id if it was not done before.

Returns
False, iff a problem occurred and the value was not materialized.

Definition at line 953 of file IslNodeBuilder.cpp.

References Domain, polly::MemAccInst::dyn_cast(), polly::findValues(), generateSCEV(), IDToValue, isl_id_free(), isl_id_get_user(), isl_set_free(), isl_set_is_empty(), preloadInvariantEquivClass(), SE, and polly::Value.

Referenced by materializeParameters().

◆ preloadInvariantEquivClass()

bool IslNodeBuilder::preloadInvariantEquivClass ( InvariantEquivClassTy IAClass)
protected

◆ preloadInvariantLoad()

Value * IslNodeBuilder::preloadInvariantLoad ( const MemoryAccess MA,
__isl_take isl_set Domain 
)
protected

Preload the memory load access MA.

If MA is not always executed it will be conditionally loaded and merged with undef from the same type. Hence, if MA is executed only under condition C then the preload code will look like this:

MA_preload = undef; if (C) MA_preload = load MA; use MA_preload

Definition at line 1067 of file IslNodeBuilder.cpp.

References Builder, polly::IslExprBuilder::create(), Domain, ExprBuilder, Function, GenDT, GenLI, polly::MemoryAccess::getAccessInstruction(), polly::MemoryAccess::getAddressFunction(), polly::IslExprBuilder::getOverflowState(), isl_ast_build_expr_from_set(), isl_ast_build_free(), isl_ast_build_from_context(), isl_map_range(), isl_set_free(), isl_set_get_space(), isl_set_gist_params(), isl_set_is_equal(), isl_set_universe(), materializeParameters(), preloadUnconditionally(), isl::map::release(), polly::IslExprBuilder::setTrackOverflow(), and polly::Value.

Referenced by preloadInvariantEquivClass().

◆ preloadInvariantLoads()

bool IslNodeBuilder::preloadInvariantLoads ( )

Preload all memory loads that are invariant.

Definition at line 1348 of file IslNodeBuilder.cpp.

References Builder, GenDT, GenLI, and preloadInvariantEquivClass().

Referenced by generateCode().

◆ preloadUnconditionally()

Value * IslNodeBuilder::preloadUnconditionally ( __isl_take isl_set AccessRange,
isl_ast_build Build,
Instruction *  AccInst 
)
protected

Preload the memory access at AccessRange with Build.

Returns
The preloaded value casted to type Ty

Definition at line 1037 of file IslNodeBuilder.cpp.

References Builder, polly::IslExprBuilder::create(), ExprBuilder, isl_ast_build_access_from_pw_multi_aff(), isl_ast_expr_address_of(), isl_pw_multi_aff_from_set(), SE, and polly::Value.

Referenced by preloadInvariantLoad().

Member Data Documentation

◆ Annotator

ScopAnnotator& polly::IslNodeBuilder::Annotator
protected

◆ BlockGen

BlockGenerator polly::IslNodeBuilder::BlockGen
protected

The generator used to copy a basic block.

Definition at line 139 of file IslNodeBuilder.h.

Referenced by createForParallel(), createUser(), finalize(), and getBlockGenerator().

◆ Builder

PollyIRBuilder& polly::IslNodeBuilder::Builder
protected

◆ DL

const DataLayout& polly::IslNodeBuilder::DL
protected

◆ DT

DominatorTree& polly::IslNodeBuilder::DT
protected

Definition at line 147 of file IslNodeBuilder.h.

Referenced by createForParallel().

◆ EscapeMap

BlockGenerator::EscapeUsersAllocaMapTy polly::IslNodeBuilder::EscapeMap
protected

See BlockGenerator::EscapeMap.

Definition at line 134 of file IslNodeBuilder.h.

Referenced by preloadInvariantEquivClass().

◆ ExprBuilder

IslExprBuilder polly::IslNodeBuilder::ExprBuilder
protected

◆ GenDT

DominatorTree* polly::IslNodeBuilder::GenDT
protected

Relates to the region where the code is emitted into.

Definition at line 152 of file IslNodeBuilder.h.

Referenced by createForParallel(), createForSequential(), createIf(), preloadInvariantLoad(), and preloadInvariantLoads().

◆ GenLI

LoopInfo* polly::IslNodeBuilder::GenLI
protected

◆ GenSE

ScalarEvolution* polly::IslNodeBuilder::GenSE
protected

Definition at line 154 of file IslNodeBuilder.h.

Referenced by createForParallel(), createForSequential(), and generateSCEV().

◆ IDToValue

IslExprBuilder::IDToValueTy polly::IslNodeBuilder::IDToValue
protected

◆ LI

LoopInfo& polly::IslNodeBuilder::LI
protected

Definition at line 145 of file IslNodeBuilder.h.

Referenced by addParameters(), createForParallel(), and getReferencesInSubtree().

◆ OutsideLoopIterations

MapVector<const Loop *, const SCEV *> polly::IslNodeBuilder::OutsideLoopIterations
protected

The current iteration of out-of-scop loops.

This map provides for a given loop a llvm::Value that contains the current loop iteration.

Definition at line 161 of file IslNodeBuilder.h.

Referenced by createForParallel(), createUser(), getReferencesInSubtree(), and materializeNonScopLoopInductionVariable().

◆ ParallelSubfunctions

SmallVector<Function *, 8> polly::IslNodeBuilder::ParallelSubfunctions
protected

A collection of all parallel subfunctions that have been created.

Definition at line 169 of file IslNodeBuilder.h.

Referenced by createForParallel(), and getParallelSubfunctions().

◆ PreloadedPtrs

SmallSet<std::pair<const SCEV *, Type *>, 16> polly::IslNodeBuilder::PreloadedPtrs
protected

Set to remember materialized invariant loads.

An invariant load is identified by its pointer (the SCEV) and its type.

Definition at line 278 of file IslNodeBuilder.h.

Referenced by preloadInvariantEquivClass().

◆ RegionGen

RegionGenerator polly::IslNodeBuilder::RegionGen
protected

The generator used to copy a non-affine region.

Definition at line 142 of file IslNodeBuilder.h.

Referenced by createUser().

◆ S

Scop& polly::IslNodeBuilder::S
protected

Definition at line 120 of file IslNodeBuilder.h.

Referenced by getReferencesInSubtree().

◆ ScalarMap

BlockGenerator::AllocaMapTy polly::IslNodeBuilder::ScalarMap
protected

Maps used by the block and region generator to demote scalars.

See BlockGenerator::ScalarMap.

Definition at line 131 of file IslNodeBuilder.h.

Referenced by preloadInvariantEquivClass().

◆ SE

ScalarEvolution& polly::IslNodeBuilder::SE
protected

◆ StartBlock

BasicBlock* polly::IslNodeBuilder::StartBlock
protected

Definition at line 148 of file IslNodeBuilder.h.

Referenced by generateSCEV().

◆ ValueMap

ValueMapT polly::IslNodeBuilder::ValueMap
protected

A set of Value -> Value remappings to apply when generating new code.

When generating new code for a ScopStmt this map is used to map certain llvm::Values to new llvm::Values.

Definition at line 184 of file IslNodeBuilder.h.

Referenced by createForParallel(), generateSCEV(), getLatestValue(), getReferencesInSubtree(), and preloadInvariantEquivClass().


The documentation for this class was generated from the following files: