Jlm
Public Member Functions | Static Public Member Functions | Static Private Member Functions | List of all members
jlm::hls::ConstantDistribution Class Referencefinal

#include <distribute-constants.hpp>

Inheritance diagram for jlm::hls::ConstantDistribution:
Inheritance graph
[legend]
Collaboration diagram for jlm::hls::ConstantDistribution:
Collaboration graph
[legend]

Public Member Functions

 ~ConstantDistribution () noexcept override
 
 ConstantDistribution ()
 
 ConstantDistribution (const ConstantDistribution &)=delete
 
ConstantDistributionoperator= (const ConstantDistribution &)=delete
 
void Run (rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
 Perform RVSDG transformation. More...
 
- Public Member Functions inherited from jlm::rvsdg::Transformation
virtual ~Transformation () noexcept
 
 Transformation (std::string_view Name)
 
const std::string_view & GetName () const noexcept
 
void Run (RvsdgModule &module)
 Perform RVSDG transformation. More...
 

Static Public Member Functions

static void CreateAndRun (rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector)
 

Static Private Member Functions

static void distributeConstantsInRootRegion (rvsdg::Region &region)
 
static void distributeConstantsInLambda (const rvsdg::LambdaNode &lambdaNode)
 
static util::HashSet< rvsdg::SimpleNode * > collectConstants (rvsdg::Region &region)
 
static util::HashSet< rvsdg::Output * > collectOutputs (const rvsdg::SimpleNode &constantNode)
 

Detailed Description

Distributes constants into subregions of gamma and theta nodes if they have users there.

Definition at line 22 of file distribute-constants.hpp.

Constructor & Destructor Documentation

◆ ~ConstantDistribution()

jlm::hls::ConstantDistribution::~ConstantDistribution ( )
overridedefaultnoexcept

◆ ConstantDistribution() [1/2]

jlm::hls::ConstantDistribution::ConstantDistribution ( )

Definition at line 213 of file distribute-constants.cpp.

◆ ConstantDistribution() [2/2]

jlm::hls::ConstantDistribution::ConstantDistribution ( const ConstantDistribution )
delete

Member Function Documentation

◆ collectConstants()

util::HashSet< rvsdg::SimpleNode * > jlm::hls::ConstantDistribution::collectConstants ( rvsdg::Region region)
staticprivate

Collects all constants within a region and recursively within its structural node's subregion.

Parameters
regionthe region for which to collect constants
Returns
A set of constants.

Definition at line 107 of file distribute-constants.cpp.

◆ collectOutputs()

util::HashSet< rvsdg::Output * > jlm::hls::ConstantDistribution::collectOutputs ( const rvsdg::SimpleNode constantNode)
staticprivate

For a given constant node constantNode, collect all gamma or theta node arguments/outputs where the constant node has users that are either another simple node or a lambda subregion result. The idea is that only outputs are of interest where there is a "real user" of a constant, and it is not just routed through a region.

Parameters
constantNodeThe constant node for which to collect the outputs.
Returns
A set outputs that have "real users" of constantNode.

Definition at line 143 of file distribute-constants.cpp.

◆ CreateAndRun()

static void jlm::hls::ConstantDistribution::CreateAndRun ( rvsdg::RvsdgModule rvsdgModule,
util::StatisticsCollector statisticsCollector 
)
inlinestatic

Definition at line 38 of file distribute-constants.hpp.

◆ distributeConstantsInLambda()

void jlm::hls::ConstantDistribution::distributeConstantsInLambda ( const rvsdg::LambdaNode lambdaNode)
staticprivate

Distribute all constants within a lambda node.

Parameters
lambdaNodeThe lambda node where the constants are distributed.

Definition at line 44 of file distribute-constants.cpp.

◆ distributeConstantsInRootRegion()

void jlm::hls::ConstantDistribution::distributeConstantsInRootRegion ( rvsdg::Region region)
staticprivate

Traverse the root region as well as phi regions to find all lambda nodes where constants should be distributed.

Parameters
regionThe region to traverse.

Definition at line 22 of file distribute-constants.cpp.

◆ operator=()

ConstantDistribution& jlm::hls::ConstantDistribution::operator= ( const ConstantDistribution )
delete

◆ Run()

void jlm::hls::ConstantDistribution::Run ( rvsdg::RvsdgModule module,
util::StatisticsCollector statisticsCollector 
)
overridevirtual

Perform RVSDG transformation.

Note
This method is expected to be called multiple times. An implementation is required to reset the objects' internal state to ensure correct behavior after every invocation.
Parameters
moduleRVSDG module the transformation is performed on.
statisticsCollectorStatistics collector for collecting transformation statistics.

Implements jlm::rvsdg::Transformation.

Definition at line 218 of file distribute-constants.cpp.


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