Jlm
Classes | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
jlm::llvm::DeadNodeElimination Class Referencefinal

Dead Node Elimination Optimization. More...

#include <DeadNodeElimination.hpp>

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

Classes

class  Context
 Dead Node Elimination context class. More...
 
class  Statistics
 Dead Node Elimination statistics class. More...
 

Public Member Functions

 ~DeadNodeElimination () noexcept override
 
 DeadNodeElimination ()
 
 DeadNodeElimination (const DeadNodeElimination &)=delete
 
 DeadNodeElimination (DeadNodeElimination &&)=delete
 
DeadNodeEliminationoperator= (const DeadNodeElimination &)=delete
 
DeadNodeEliminationoperator= (DeadNodeElimination &&)=delete
 
void run (rvsdg::Region &region)
 
void Run (rvsdg::RvsdgModule &module, 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...
 

Private Member Functions

void MarkRegion (const rvsdg::Region &region)
 
void MarkOutput (const jlm::rvsdg::Output &output)
 
void SweepRvsdg (rvsdg::Graph &rvsdg) const
 
void SweepRegion (rvsdg::Region &region) const
 
void SweepStructuralNode (rvsdg::StructuralNode &node) const
 
void SweepGamma (rvsdg::GammaNode &gammaNode) const
 
void SweepTheta (rvsdg::ThetaNode &thetaNode) const
 
void SweepLambda (rvsdg::LambdaNode &lambdaNode) const
 
void SweepPhi (rvsdg::PhiNode &phiNode) const
 

Static Private Member Functions

static void SweepDelta (rvsdg::DeltaNode &deltaNode)
 

Private Attributes

std::unique_ptr< ContextContext_
 

Detailed Description

Dead Node Elimination Optimization.

Dead Node Elimination removes all nodes that do not contribute to the result of a computation. A node is considered dead if all its outputs are dead, and an output is considered dead if it has no users or all its users are already dead. An input (and therefore an outputs' user) is considered dead if the corresponding node is dead. We call all nodes, inputs, and outputs that are not dead alive.

The Dead Node Elimination optimization consists of two phases: mark and sweep. The mark phase traverses the RVSDG and marks all nodes, inputs, and outputs that it finds as alive, while the sweep phase removes then all nodes, inputs, and outputs that were not discovered by the mark phase, i.e., all dead nodes, inputs, and outputs.

Please see TestDeadNodeElimination.cpp for Dead Node Elimination examples.

Definition at line 43 of file DeadNodeElimination.hpp.

Constructor & Destructor Documentation

◆ ~DeadNodeElimination()

jlm::llvm::DeadNodeElimination::~DeadNodeElimination ( )
overridedefaultnoexcept

◆ DeadNodeElimination() [1/3]

jlm::llvm::DeadNodeElimination::DeadNodeElimination ( )

Definition at line 144 of file DeadNodeElimination.cpp.

◆ DeadNodeElimination() [2/3]

jlm::llvm::DeadNodeElimination::DeadNodeElimination ( const DeadNodeElimination )
delete

◆ DeadNodeElimination() [3/3]

jlm::llvm::DeadNodeElimination::DeadNodeElimination ( DeadNodeElimination &&  )
delete

Member Function Documentation

◆ MarkOutput()

void jlm::llvm::DeadNodeElimination::MarkOutput ( const jlm::rvsdg::Output output)
private

Definition at line 193 of file DeadNodeElimination.cpp.

◆ MarkRegion()

void jlm::llvm::DeadNodeElimination::MarkRegion ( const rvsdg::Region region)
private

Definition at line 184 of file DeadNodeElimination.cpp.

◆ operator=() [1/2]

DeadNodeElimination& jlm::llvm::DeadNodeElimination::operator= ( const DeadNodeElimination )
delete

◆ operator=() [2/2]

DeadNodeElimination& jlm::llvm::DeadNodeElimination::operator= ( DeadNodeElimination &&  )
delete

◆ run()

void jlm::llvm::DeadNodeElimination::run ( rvsdg::Region region)

Definition at line 149 of file DeadNodeElimination.cpp.

◆ Run()

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

◆ SweepDelta()

void jlm::llvm::DeadNodeElimination::SweepDelta ( rvsdg::DeltaNode deltaNode)
staticprivate

Definition at line 494 of file DeadNodeElimination.cpp.

◆ SweepGamma()

void jlm::llvm::DeadNodeElimination::SweepGamma ( rvsdg::GammaNode gammaNode) const
private

Definition at line 389 of file DeadNodeElimination.cpp.

◆ SweepLambda()

void jlm::llvm::DeadNodeElimination::SweepLambda ( rvsdg::LambdaNode lambdaNode) const
private

Definition at line 455 of file DeadNodeElimination.cpp.

◆ SweepPhi()

void jlm::llvm::DeadNodeElimination::SweepPhi ( rvsdg::PhiNode phiNode) const
private

Definition at line 462 of file DeadNodeElimination.cpp.

◆ SweepRegion()

void jlm::llvm::DeadNodeElimination::SweepRegion ( rvsdg::Region region) const
private

Definition at line 342 of file DeadNodeElimination.cpp.

◆ SweepRvsdg()

void jlm::llvm::DeadNodeElimination::SweepRvsdg ( rvsdg::Graph rvsdg) const
private

Definition at line 324 of file DeadNodeElimination.cpp.

◆ SweepStructuralNode()

void jlm::llvm::DeadNodeElimination::SweepStructuralNode ( rvsdg::StructuralNode node) const
private

Definition at line 362 of file DeadNodeElimination.cpp.

◆ SweepTheta()

void jlm::llvm::DeadNodeElimination::SweepTheta ( rvsdg::ThetaNode thetaNode) const
private

Definition at line 428 of file DeadNodeElimination.cpp.

Member Data Documentation

◆ Context_

std::unique_ptr<Context> jlm::llvm::DeadNodeElimination::Context_
private

Definition at line 100 of file DeadNodeElimination.hpp.


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