6 #ifndef JLM_LLVM_OPT_LOOP_STRENGTH_REDUCTION_HPP
7 #define JLM_LLVM_OPT_LOOP_STRENGTH_REDUCTION_HPP
72 rvsdg::Output & output,
73 rvsdg::ThetaNode & thetaNode,
74 util::HashSet<rvsdg::Output *> & candidateOperations,
75 util::HashSet<rvsdg::Output *> & visited);
80 std::optional<rvsdg::Output *>
83 std::optional<rvsdg::Output *>
86 std::optional<rvsdg::ThetaNode::LoopVar>
89 std::optional<rvsdg::ThetaNode::LoopVar>
92 rvsdg::ThetaNode & thetaNode,
96 std::unordered_map<const rvsdg::Output *, std::unique_ptr<
SCEV>>
SCEVMap_;
static jlm::util::StatisticsCollector statisticsCollector
bool IsValidCandidateOperation(const rvsdg::Output &output, const rvsdg::SimpleOperation &operation)
~LoopStrengthReduction() noexcept override
std::optional< rvsdg::ThetaNode::LoopVar > CreateNewArithmeticInductionVariable(const SCEVChainRecurrence &chrec, rvsdg::ThetaNode &thetaNode, size_t numBits)
std::optional< rvsdg::Output * > HoistChrec(const SCEVChainRecurrence &chrec, const rvsdg::ThetaNode &thetaNode, size_t numBits)
void ReplaceCandidateOperation(rvsdg::Output &output, rvsdg::ThetaNode &thetaNode)
std::optional< rvsdg::Output * > HoistSCEVExpresssion(const SCEV &scev, rvsdg::ThetaNode &thetaNode, size_t numBits)
void ProcessOutput(rvsdg::Output &output, rvsdg::ThetaNode &thetaNode, util::HashSet< rvsdg::Output * > &candidateOperations, util::HashSet< rvsdg::Output * > &visited)
bool DependsOnInductionVariable(const rvsdg::Output &output)
std::unordered_map< const rvsdg::Output *, bool > ContainsMulMemo_
std::unordered_map< const rvsdg::Output *, bool > DependsOnIVMemo_
void ReduceStrength(rvsdg::ThetaNode &thetaNode)
std::unordered_map< const rvsdg::Output *, std::unique_ptr< SCEVChainRecurrence > > ChrecMap_
bool ContainsMul(const rvsdg::Output &output)
void ProcessRegion(rvsdg::Region ®ion)
std::unordered_map< const rvsdg::Output *, std::unique_ptr< SCEV > > SCEVMap_
std::unique_ptr< Context > Context_
std::optional< rvsdg::ThetaNode::LoopVar > CreateNewGEPInductionVariable(const SCEVChainRecurrence &chrec, rvsdg::ThetaNode &thetaNode)
void Run(rvsdg::RvsdgModule &rvsdgModule, util::StatisticsCollector &statisticsCollector) override
Perform RVSDG transformation.
Global memory state passed between functions.