forked from OSchip/llvm-project
[NFC] Outline the application of register tiling.
llvm-svn: 272515
This commit is contained in:
parent
071d0f1807
commit
b17b9a8324
|
@ -90,6 +90,16 @@ private:
|
|||
tileNode(__isl_take isl_schedule_node *Node, const char *Identifier,
|
||||
llvm::ArrayRef<int> TileSizes, int DefaultTileSize);
|
||||
|
||||
/// @brief Tile a schedule node and unroll point loops.
|
||||
///
|
||||
/// @param Node The node to register tile.
|
||||
/// @param TileSizes A vector of tile sizes that should be used for
|
||||
/// tiling.
|
||||
/// @param DefaultTileSize A default tile size that is used for dimensions
|
||||
static __isl_give isl_schedule_node *
|
||||
applyRegisterTiling(__isl_take isl_schedule_node *Node,
|
||||
llvm::ArrayRef<int> TileSizes, int DefaultTileSize);
|
||||
|
||||
/// @brief Check if this node is a band node we want to tile.
|
||||
///
|
||||
/// We look for innermost band nodes where individual dimensions are marked as
|
||||
|
|
|
@ -335,6 +335,17 @@ ScheduleTreeOptimizer::tileNode(__isl_take isl_schedule_node *Node,
|
|||
return Node;
|
||||
}
|
||||
|
||||
__isl_give isl_schedule_node *
|
||||
ScheduleTreeOptimizer::applyRegisterTiling(__isl_take isl_schedule_node *Node,
|
||||
llvm::ArrayRef<int> TileSizes,
|
||||
int DefaultTileSize) {
|
||||
auto *Ctx = isl_schedule_node_get_ctx(Node);
|
||||
Node = tileNode(Node, "Register tiling", TileSizes, DefaultTileSize);
|
||||
Node = isl_schedule_node_band_set_ast_build_options(
|
||||
Node, isl_union_set_read_from_str(Ctx, "{unroll[x]}"));
|
||||
return Node;
|
||||
}
|
||||
|
||||
bool ScheduleTreeOptimizer::isTileableBandNode(
|
||||
__isl_keep isl_schedule_node *Node) {
|
||||
if (isl_schedule_node_get_type(Node) != isl_schedule_node_band)
|
||||
|
@ -374,13 +385,9 @@ ScheduleTreeOptimizer::standardBandOpts(__isl_take isl_schedule_node *Node,
|
|||
Node = tileNode(Node, "2nd level tiling", SecondLevelTileSizes,
|
||||
SecondLevelDefaultTileSize);
|
||||
|
||||
if (RegisterTiling) {
|
||||
auto *Ctx = isl_schedule_node_get_ctx(Node);
|
||||
Node = tileNode(Node, "Register tiling", RegisterTileSizes,
|
||||
RegisterDefaultTileSize);
|
||||
Node = isl_schedule_node_band_set_ast_build_options(
|
||||
Node, isl_union_set_read_from_str(Ctx, "{unroll[x]}"));
|
||||
}
|
||||
if (RegisterTiling)
|
||||
Node =
|
||||
applyRegisterTiling(Node, RegisterTileSizes, RegisterDefaultTileSize);
|
||||
|
||||
if (PollyVectorizerChoice == VECTORIZER_NONE)
|
||||
return Node;
|
||||
|
|
Loading…
Reference in New Issue