Polly 19.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.
 
void updateValues (ValueMapT &NewValues)
 Change the llvm::Value(s) used for code generation.
 
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.
 

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 1259 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 894 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 392 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 732 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 1387 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 797 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 834 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 1363 of file IslNodeBuilder.cpp.

References assert, Builder, DL, polly::expandCodeFor(), 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 385 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 148 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 317 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 313 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 852 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 1003 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 992 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 928 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 1042 of file IslNodeBuilder.cpp.

References Builder, polly::IslExprBuilder::create(), Domain, DT, ExprBuilder, Function, 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(), LI, 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 1323 of file IslNodeBuilder.cpp.

References Builder, DT, LI, 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 1012 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().

◆ updateValues()

void IslNodeBuilder::updateValues ( ValueMapT NewValues)
protected

Change the llvm::Value(s) used for code generation.

When generating code certain values (e.g., references to induction variables or array base pointers) in the original code may be replaced by new values. This function allows to (partially) update the set of values used. A typical use case for this function is the case when we continue code generation in a subfunction/kernel function and need to explicitly pass down certain values.

Parameters
NewValuesA map that maps certain llvm::Values to new llvm::Values.

Definition at line 369 of file IslNodeBuilder.cpp.

References IDToValue, and ValueMap.

Referenced by createForParallel().

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 createUser(), finalize(), and getBlockGenerator().

◆ Builder

PollyIRBuilder& polly::IslNodeBuilder::Builder
protected

◆ DL

const DataLayout& polly::IslNodeBuilder::DL
protected

◆ DT

DominatorTree& polly::IslNodeBuilder::DT
protected

◆ 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

◆ IDToValue

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

◆ LI

LoopInfo& polly::IslNodeBuilder::LI
protected

◆ 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 154 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 162 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 283 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 177 of file IslNodeBuilder.h.

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


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