Jlm
Loading...
Searching...
No Matches
Classes | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
jlm::llvm::NodeHoisting Class Referencefinal

Node Hoisting Transformation. More...

#include <NodeHoisting.hpp>

Inheritance diagram for jlm::llvm::NodeHoisting:
Inheritance graph
[legend]
Collaboration diagram for jlm::llvm::NodeHoisting:
Collaboration graph
[legend]

Classes

class  Context
 
class  Statistics
 

Public Member Functions

 ~NodeHoisting () noexcept override
 
 NodeHoisting ()
 
void Run (rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
 Perform RVSDG transformation.
 
- 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.
 

Private Member Functions

void hoistNodesInRootRegion (rvsdg::Region &region)
 
void hoistNodesInLambda (rvsdg::LambdaNode &lambdaNode)
 
void markNodes (const rvsdg::Region &region)
 
void hoistNodes (rvsdg::Region &region)
 
void copyNodeToTargetRegion (rvsdg::Node &node) const
 
rvsdg::Region & computeTargetRegion (const rvsdg::Node &node) const
 
rvsdg::Region & computeTargetRegion (const rvsdg::Output &output) const
 
void printHoistChain (const rvsdg::Region &region) const
 

Static Private Member Functions

static std::vector< rvsdg::Input * > getUsersFromTargetRegion (rvsdg::Node &node, rvsdg::Region &targetRegion)
 
static rvsdg::Input & getUserFromTargetRegion (rvsdg::Input &input, rvsdg::Region &targetRegion)
 
static bool isInvariantMemoryStateLoopVar (const rvsdg::ThetaNode::LoopVar &loopVar)
 

Private Attributes

std::unique_ptr< Context > context_ {}
 

Detailed Description

Node Hoisting Transformation.

This transformation hoists nodes out of gamma and theta nodes as far up the region tree as possible. It accomplishes this in two phases:

  1. Mark phase: This phase annotates each node with its target region, i.e., the final region in the region tree where it is legally allowed to hoist a node. The algorithm inspects each node's predecessors and their target regions to compute a node's target region.
  2. Hoist phase: This phase uses the information computed in the mark phase to hoist the nodes to their target region.

These two phases are performed on every function in the module.

Definition at line 36 of file NodeHoisting.hpp.

Constructor & Destructor Documentation

◆ ~NodeHoisting()

jlm::llvm::NodeHoisting::~NodeHoisting ( )
overridedefaultnoexcept

◆ NodeHoisting()

jlm::llvm::NodeHoisting::NodeHoisting ( )

Definition at line 99 of file NodeHoisting.cpp.

Member Function Documentation

◆ computeTargetRegion() [1/2]

rvsdg::Region & jlm::llvm::NodeHoisting::computeTargetRegion ( const rvsdg::Node &  node) const
private

Definition at line 233 of file NodeHoisting.cpp.

◆ computeTargetRegion() [2/2]

rvsdg::Region & jlm::llvm::NodeHoisting::computeTargetRegion ( const rvsdg::Output &  output) const
private

Definition at line 124 of file NodeHoisting.cpp.

◆ copyNodeToTargetRegion()

void jlm::llvm::NodeHoisting::copyNodeToTargetRegion ( rvsdg::Node &  node) const
private

Definition at line 411 of file NodeHoisting.cpp.

◆ getUserFromTargetRegion()

rvsdg::Input & jlm::llvm::NodeHoisting::getUserFromTargetRegion ( rvsdg::Input &  input,
rvsdg::Region &  targetRegion 
)
staticprivate

Definition at line 308 of file NodeHoisting.cpp.

◆ getUsersFromTargetRegion()

std::vector< rvsdg::Input * > jlm::llvm::NodeHoisting::getUsersFromTargetRegion ( rvsdg::Node &  node,
rvsdg::Region &  targetRegion 
)
staticprivate

Definition at line 346 of file NodeHoisting.cpp.

◆ hoistNodes()

void jlm::llvm::NodeHoisting::hoistNodes ( rvsdg::Region &  region)
private

Definition at line 477 of file NodeHoisting.cpp.

◆ hoistNodesInLambda()

void jlm::llvm::NodeHoisting::hoistNodesInLambda ( rvsdg::LambdaNode &  lambdaNode)
private

Definition at line 545 of file NodeHoisting.cpp.

◆ hoistNodesInRootRegion()

void jlm::llvm::NodeHoisting::hoistNodesInRootRegion ( rvsdg::Region &  region)
private

Definition at line 557 of file NodeHoisting.cpp.

◆ isInvariantMemoryStateLoopVar()

bool jlm::llvm::NodeHoisting::isInvariantMemoryStateLoopVar ( const rvsdg::ThetaNode::LoopVar &  loopVar)
staticprivate

Definition at line 104 of file NodeHoisting.cpp.

◆ markNodes()

void jlm::llvm::NodeHoisting::markNodes ( const rvsdg::Region &  region)
private

Definition at line 278 of file NodeHoisting.cpp.

◆ printHoistChain()

void jlm::llvm::NodeHoisting::printHoistChain ( const rvsdg::Region &  region) const
private

Definition at line 503 of file NodeHoisting.cpp.

◆ Run()

void jlm::llvm::NodeHoisting::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 587 of file NodeHoisting.cpp.

Member Data Documentation

◆ context_

std::unique_ptr<Context> jlm::llvm::NodeHoisting::context_ {}
private

Definition at line 84 of file NodeHoisting.hpp.


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