Polly 20.0.0git
|
#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. | |
IslExprBuilder & | getExprBuilder () |
BlockGenerator & | getBlockGenerator () |
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 <S) |
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 | |
Scop & | S |
PollyIRBuilder & | Builder |
ScopAnnotator & | Annotator |
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. | |
Definition at line 64 of file IslNodeBuilder.h.
|
inline |
Definition at line 66 of file IslNodeBuilder.h.
|
virtualdefault |
References polly::Value.
void IslNodeBuilder::addParameters | ( | __isl_take isl_set * | Context | ) |
Definition at line 1365 of file IslNodeBuilder.cpp.
References isl_set_free(), LI, materializeNonScopLoopInductionVariable(), and materializeParameters().
Referenced by generateCode().
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().
void IslNodeBuilder::create | ( | __isl_take isl_ast_node * | Node | ) |
Definition at line 929 of file IslNodeBuilder.cpp.
References createBlock(), createFor(), createIf(), createMark(), createUser(), isl_ast_node_block, isl_ast_node_error, isl_ast_node_for, isl_ast_node_get_type(), isl_ast_node_if, isl_ast_node_mark, and isl_ast_node_user.
Referenced by createBlock(), createForParallel(), createForSequential(), createIf(), createMark(), and generateCode().
|
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().
|
protectedvirtual |
Definition at line 697 of file IslNodeBuilder.cpp.
References createForParallel(), createForSequential(), polly::IslAstInfo::isExecutedInParallel(), polly::IslAstInfo::isParallel(), polly::IslAstInfo::isReductionParallel(), isl::manage(), and isl::manage_copy().
Referenced by create().
|
protected |
Create LLVM-IR that executes a for node thread parallel.
For | The FOR isl_ast_node for which code is generated. |
Definition at line 497 of file IslNodeBuilder.cpp.
References polly::ScopAnnotator::addAlternativeAliasBases(), Annotator, assert, BlockGen, Builder, polly::IslExprBuilder::create(), create(), DL, DT, ExprBuilder, Function, GenDT, GenLI, GenSE, getReferencesInSubtree(), polly::IslExprBuilder::getType(), getUpperBound(), polly::IslExprBuilder::getWidestType(), IDToValue, isl_ast_expr_free(), isl_ast_expr_get_id(), isl_ast_node_for_get_body(), isl_ast_node_for_get_inc(), isl_ast_node_for_get_init(), isl_ast_node_for_get_iterator(), isl_ast_node_free(), isl_id_free(), LI, isl::manage_copy(), materializeNonScopLoopInductionVariable(), OutsideLoopIterations, ParallelSubfunctions, PollyOmpBackend(), isl::ast_expr::release(), polly::ScopAnnotator::resetAlternativeAliasBases(), polly::BlockGenerator::switchGeneratedFunc(), polly::IslExprBuilder::switchGeneratedFunc(), polly::Value, and ValueMap.
Referenced by createFor().
|
protected |
Definition at line 437 of file IslNodeBuilder.cpp.
References Annotator, isl::ast_node_for::body(), Builder, polly::IslExprBuilder::create(), create(), polly::createLoop(), ExprBuilder, GenDT, GenLI, GenSE, isl::ast_expr::get(), isl::id::get(), isl::ast_expr::get_id(), polly::IslExprBuilder::getType(), getUpperBound(), polly::IslExprBuilder::getWidestType(), IDToValue, isl::ast_node_for::inc(), isl::ast_node_for::init(), IsLoopVectorizerDisabled(), isl::ast_node_for::iterator(), polly::ScopAnnotator::popLoop(), isl::ast_expr::release(), isl::ast_node::release(), and polly::Value.
Referenced by createFor(), and createMark().
|
protectedvirtual |
Definition at line 707 of file IslNodeBuilder.cpp.
References Builder, polly::IslExprBuilder::create(), create(), ExprBuilder, Function, GenDT, GenLI, isl_ast_node_free(), isl_ast_node_if_get_cond(), isl_ast_node_if_get_else(), isl_ast_node_if_get_then(), isl_ast_node_if_has_else(), and polly::Value.
Referenced by create().
|
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.
Mark | The 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().
|
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.
Stmt | The statement for which to (possibly) generate new access functions. |
Node | The ast node corresponding to the statement for us to extract the local schedule from. |
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().
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.
Condition | The condition to evaluate |
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().
|
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.
Expr | The call expression that represents the statement. |
Stmt | The statement that is called. |
LTS | The 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().
|
protected |
Definition at line 841 of file IslNodeBuilder.cpp.
References createSubstitutions(), IDToValue, isl_ast_expr_copy(), isl_ast_expr_free(), isl_id_free(), and polly::Value.
|
protectedvirtual |
Definition at line 888 of file IslNodeBuilder.cpp.
References BlockGen, polly::RegionGenerator::copyStmt(), polly::BlockGenerator::copyStmt(), createNewAccesses(), createSubstitutions(), generateCopyStmt(), polly::ScopStmt::isBlockStmt(), polly::ScopStmt::isCopyStmt(), isl_ast_expr_free(), isl_ast_expr_get_id(), isl_ast_expr_get_op_arg(), isl_ast_node_free(), isl_ast_node_user_get_expr(), isl_id_free(), isl_id_get_user(), OutsideLoopIterations, and RegionGen.
Referenced by create().
|
inlinevirtual |
Finalize code generation.
Definition at line 105 of file IslNodeBuilder.h.
References BlockGen, and polly::BlockGenerator::finalizeSCoP().
Referenced by generateCode().
|
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.
Stmt | The copy statement that contains the accesses. |
NewAccesses | The 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().
|
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.
Expr | The 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().
|
inline |
Get the associated block generator.
Definition at line 112 of file IslNodeBuilder.h.
References BlockGen.
Referenced by getReferencesInSubtree().
|
inline |
|
protected |
Return the most up-to-date version of the llvm::Value for code generation.
Original | The Value to check for an up to date version. |
Value
from ValueMap, or Original
if no mapping exists. Definition at line 373 of file IslNodeBuilder.cpp.
References polly::Value, and ValueMap.
Referenced by getReferencesInSubtree().
|
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().
|
inline |
Return the parallel subfunctions that have been created.
Definition at line 115 of file IslNodeBuilder.h.
References ParallelSubfunctions.
Referenced by generateCode().
|
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.
For | The node defining the subtree. |
Values | A vector that will be filled with the Values referenced in this subtree. |
Loops | A 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.
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().
|
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.
Node | The node we want to obtain the schedule for. |
Definition at line 317 of file IslNodeBuilder.cpp.
References polly::IslAstInfo::getSchedule().
Referenced by getReferencesInSubtree().
|
protected |
Definition at line 114 of file IslNodeBuilder.cpp.
References assert, isl::ast_node_for::cond(), isl::ast_expr::get(), isl::id::get(), isl::ast_expr::get_id(), isl::ast_expr::get_op_arg(), isl_ast_expr_get_op_type(), isl_ast_expr_get_type(), isl_ast_expr_id, isl_ast_expr_op, isl_ast_op_le, isl_ast_op_lt, isl_ast_op_type, and isl::ast_node_for::iterator().
Referenced by createForParallel(), createForSequential(), and getNumberOfIterations().
|
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 L
s 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().
|
protected |
Materialize all parameters in the current scop.
Definition at line 1028 of file IslNodeBuilder.cpp.
References materializeValue().
Referenced by addParameters(), and preloadInvariantLoad().
|
protected |
Materialize parameters of Set
.
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().
|
protected |
Materialize code for Id
if it was not done before.
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().
|
protected |
Preload the invariant access equivalence class IAClass
.
This function will preload the representing load from IAClass
and map all members of IAClass
to that preloaded value, potentially casted to the required type.
Definition at line 1157 of file IslNodeBuilder.cpp.
References polly::InvariantEquivClassTy::AccessType, polly::ScopAnnotator::addAlternativeAliasBases(), polly::Alloca, Annotator, assert, Builder, isl::set::copy(), DL, EscapeMap, polly::InvariantEquivClassTy::ExecutionContext, polly::findValues(), polly::MemoryAccess::getAccessInstruction(), polly::MemoryAccess::getOriginalBaseAddr(), polly::MemoryAccess::getScopArrayInfo(), polly::InvariantEquivClassTy::IdentifyingPointer, IDToValue, isl::set::intersect(), polly::InvariantEquivClassTy::InvariantAccesses, polly::MemoryAccess::isArrayKind(), isl_id_free(), polly::MemoryAccess::isRead(), PreloadedPtrs, preloadInvariantEquivClass(), preloadInvariantLoad(), ScalarMap, SE, polly::Value, and ValueMap.
Referenced by materializeValue(), preloadInvariantEquivClass(), and preloadInvariantLoads().
|
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().
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().
|
protected |
Preload the memory access at AccessRange
with Build
.
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().
|
protected |
Definition at line 122 of file IslNodeBuilder.h.
Referenced by createForParallel(), createForSequential(), createMark(), and preloadInvariantEquivClass().
|
protected |
The generator used to copy a basic block.
Definition at line 139 of file IslNodeBuilder.h.
Referenced by createForParallel(), createUser(), finalize(), and getBlockGenerator().
|
protected |
Definition at line 121 of file IslNodeBuilder.h.
Referenced by allocateNewArrays(), createForParallel(), createForSequential(), createIf(), createRTC(), generateCopyStmt(), generateSCEV(), materializeNonScopLoopInductionVariable(), preloadInvariantEquivClass(), preloadInvariantLoad(), preloadInvariantLoads(), and preloadUnconditionally().
|
protected |
Definition at line 144 of file IslNodeBuilder.h.
Referenced by allocateNewArrays(), createForParallel(), generateSCEV(), and preloadInvariantEquivClass().
|
protected |
Definition at line 147 of file IslNodeBuilder.h.
Referenced by createForParallel().
|
protected |
See BlockGenerator::EscapeMap.
Definition at line 134 of file IslNodeBuilder.h.
Referenced by preloadInvariantEquivClass().
|
protected |
Definition at line 124 of file IslNodeBuilder.h.
Referenced by createForParallel(), createForSequential(), createIf(), createRTC(), createSubstitutions(), generateCopyStmt(), getExprBuilder(), preloadInvariantLoad(), and preloadUnconditionally().
|
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().
|
protected |
Definition at line 153 of file IslNodeBuilder.h.
Referenced by createForParallel(), createForSequential(), createIf(), preloadInvariantLoad(), and preloadInvariantLoads().
|
protected |
Definition at line 154 of file IslNodeBuilder.h.
Referenced by createForParallel(), createForSequential(), and generateSCEV().
|
protected |
Definition at line 166 of file IslNodeBuilder.h.
Referenced by createForParallel(), createForSequential(), createSubstitutionsVector(), getReferencesInSubtree(), materializeValue(), and preloadInvariantEquivClass().
|
protected |
Definition at line 145 of file IslNodeBuilder.h.
Referenced by addParameters(), createForParallel(), and getReferencesInSubtree().
|
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().
|
protected |
A collection of all parallel subfunctions that have been created.
Definition at line 169 of file IslNodeBuilder.h.
Referenced by createForParallel(), and getParallelSubfunctions().
|
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().
|
protected |
The generator used to copy a non-affine region.
Definition at line 142 of file IslNodeBuilder.h.
Referenced by createUser().
|
protected |
Definition at line 120 of file IslNodeBuilder.h.
Referenced by getReferencesInSubtree().
|
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().
|
protected |
Definition at line 146 of file IslNodeBuilder.h.
Referenced by createSubstitutions(), generateSCEV(), getReferencesInSubtree(), materializeNonScopLoopInductionVariable(), materializeValue(), preloadInvariantEquivClass(), and preloadUnconditionally().
|
protected |
Definition at line 148 of file IslNodeBuilder.h.
Referenced by generateSCEV().
|
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().