6 #ifndef JLM_LLVM_OPT_PREDICATECORRELATION_HPP
7 #define JLM_LLVM_OPT_PREDICATECORRELATION_HPP
28 class StatisticsCollector;
108 static std::unique_ptr<GammaGammaPredicateCorrelation>
128 std::optional<std::unique_ptr<GammaGammaPredicateCorrelation>>
152 variant<ControlConstantCorrelationData, MatchConstantCorrelationData, MatchCorrelationData>;
163 data_(std::move(correlationData))
191 static std::unique_ptr<ThetaGammaPredicateCorrelation>
204 static std::unique_ptr<ThetaGammaPredicateCorrelation>
217 static std::unique_ptr<ThetaGammaPredicateCorrelation>
243 std::optional<std::unique_ptr<ThetaGammaPredicateCorrelation>>
259 std::optional<GammaSubregionRoles>
rvsdg::GammaNode & gammaNode1() const noexcept
CorrelationData correlationData_
GammaGammaPredicateCorrelation(const CorrelationType type, rvsdg::GammaNode &gammaNode1, rvsdg::GammaNode &gammaNode2, CorrelationData correlationData)
rvsdg::GammaNode & gammaNode2() const noexcept
rvsdg::GammaNode & gammaNode2_
rvsdg::GammaNode & gammaNode1_
static std::unique_ptr< GammaGammaPredicateCorrelation > CreateMatchCorrelation(rvsdg::GammaNode &gammaNode1, rvsdg::GammaNode &gammaNode2, MatchCorrelationData correlationData)
const CorrelationData & correlationData() const noexcept
std::variant< MatchCorrelationData > CorrelationData
CorrelationType type() const noexcept
static bool handleMatchConstantCorrelation(const ThetaGammaPredicateCorrelation &correlation)
static void correlatePredicatesInRegion(rvsdg::Region ®ion)
PredicateCorrelation(const PredicateCorrelation &)=delete
PredicateCorrelation & operator=(const PredicateCorrelation &)=delete
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
static bool handleControlConstantCorrelation(const ThetaGammaPredicateCorrelation &correlation)
static void correlatePredicatesInTheta(rvsdg::ThetaNode &thetaNode)
~PredicateCorrelation() noexcept override
const CorrelationData & data() const noexcept
CorrelationType type() const noexcept
rvsdg::GammaNode & gammaNode() const noexcept
static std::unique_ptr< ThetaGammaPredicateCorrelation > CreateControlConstantCorrelation(rvsdg::ThetaNode &thetaNode, rvsdg::GammaNode &gammaNode, ControlConstantCorrelationData data)
rvsdg::ThetaNode & thetaNode() const noexcept
static std::unique_ptr< ThetaGammaPredicateCorrelation > CreateMatchConstantCorrelation(rvsdg::ThetaNode &thetaNode, rvsdg::GammaNode &gammaNode, MatchConstantCorrelationData data)
rvsdg::ThetaNode & thetaNode_
ThetaGammaPredicateCorrelation(const CorrelationType type, rvsdg::ThetaNode &thetaNode, rvsdg::GammaNode &gammaNode, CorrelationData correlationData)
std::variant< ControlConstantCorrelationData, MatchConstantCorrelationData, MatchCorrelationData > CorrelationData
static std::unique_ptr< ThetaGammaPredicateCorrelation > CreateMatchCorrelation(rvsdg::ThetaNode &thetaNode, rvsdg::GammaNode &gammaNode, MatchCorrelationData data)
std::vector< uint64_t > ControlConstantCorrelationData
rvsdg::GammaNode & gammaNode_
Conditional operator / pattern matching.
Represent acyclic RVSDG subgraphs.
Global memory state passed between functions.
std::optional< std::unique_ptr< ThetaGammaPredicateCorrelation > > computeThetaGammaPredicateCorrelation(rvsdg::ThetaNode &thetaNode)
std::optional< std::unique_ptr< GammaGammaPredicateCorrelation > > computeGammaGammaPredicateCorrelation(rvsdg::GammaNode &gammaNode)
std::optional< GammaSubregionRoles > determineGammaSubregionRoles(const ThetaGammaPredicateCorrelation &correlation)
@ ControlConstantCorrelation
@ MatchConstantCorrelation
rvsdg::Region * exitSubregion
rvsdg::Region * repetitionSubregion
std::vector< uint64_t > alternatives