6 #ifndef JLM_LLVM_OPT_LOADCHAINSEPARATION_HPP
7 #define JLM_LLVM_OPT_LOADCHAINSEPARATION_HPP
52 Run(rvsdg::RvsdgModule & module, util::StatisticsCollector & statisticsCollector) override;
63 rvsdg::ThetaNode & thetaNode,
64 util::HashSet<rvsdg::Output *> & visitedOutputs);
81 rvsdg::Output & startOutput,
82 util::HashSet<rvsdg::Output *> & visitedOutputs);
118 links.push_back(std::move(modRefChainLink));
122 std::vector<ModRefChainLink>
links{};
131 if (modRefChain.
links.size() >= 2)
156 ModRefChainSummary & summary);
167 static std::vector<ModRefChain>
void Run(rvsdg::RvsdgModule &module, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
std::unique_ptr< Context > Context_
static rvsdg::Input & mapMemoryStateOutputToInput(const rvsdg::Output &output)
void separateRefenceChainsInGamma(rvsdg::GammaNode &gammaNode)
static std::vector< ModRefChain > extractReferenceSubchains(const ModRefChain &modRefChain)
void traceModRefChains(rvsdg::Output &startOutput, util::HashSet< rvsdg::Output * > &visitedOutputs, ModRefChainSummary &summary)
void separateReferenceChainsInLambda(rvsdg::LambdaNode &lambdaNode)
bool separateReferenceChains(rvsdg::Output &startOutput, util::HashSet< rvsdg::Output * > &visitedOutputs)
~LoadChainSeparation() noexcept override
void separateReferenceChainsInRegion(rvsdg::Region ®ion)
void separateRefenceChainsInTheta(rvsdg::ThetaNode &thetaNode, util::HashSet< rvsdg::Output * > &visitedOutputs)
Global memory state passed between functions.
bool hasModificationChainLink
std::vector< ModRefChain > modRefChains
void add(ModRefChain modRefChain)
std::vector< ModRefChainLink > links
void add(ModRefChainLink modRefChainLink)
bool hasModificationChainLink