#include <LoopStrengthReduction.hpp>
|
| void | ProcessRegion (rvsdg::Region ®ion) |
| |
| void | ReduceStrength (rvsdg::ThetaNode &thetaNode) |
| |
| bool | ContainsMul (const rvsdg::Output &output) |
| |
| bool | DependsOnInductionVariable (const rvsdg::Output &output) |
| |
| bool | IsValidCandidateOperation (const rvsdg::Output &output, const rvsdg::SimpleOperation &operation) |
| |
| void | ProcessOutput (rvsdg::Output &output, rvsdg::ThetaNode &thetaNode, util::HashSet< rvsdg::Output * > &candidateOperations, util::HashSet< rvsdg::Output * > &visited) |
| |
| void | ReplaceCandidateOperation (rvsdg::Output &output, rvsdg::ThetaNode &thetaNode) |
| |
| std::optional< rvsdg::Output * > | HoistChrec (const SCEVChainRecurrence &chrec, const rvsdg::ThetaNode &thetaNode, size_t numBits) |
| |
| std::optional< rvsdg::Output * > | HoistSCEVExpresssion (const SCEV &scev, rvsdg::ThetaNode &thetaNode, size_t numBits) |
| |
| std::optional< rvsdg::ThetaNode::LoopVar > | CreateNewGEPInductionVariable (const SCEVChainRecurrence &chrec, rvsdg::ThetaNode &thetaNode) |
| |
| std::optional< rvsdg::ThetaNode::LoopVar > | CreateNewArithmeticInductionVariable (const SCEVChainRecurrence &chrec, rvsdg::ThetaNode &thetaNode, size_t numBits) |
| |
Definition at line 16 of file LoopStrengthReduction.hpp.
◆ ~LoopStrengthReduction()
| jlm::llvm::LoopStrengthReduction::~LoopStrengthReduction |
( |
| ) |
|
|
overridedefaultnoexcept |
◆ LoopStrengthReduction() [1/3]
| jlm::llvm::LoopStrengthReduction::LoopStrengthReduction |
( |
| ) |
|
◆ LoopStrengthReduction() [2/3]
◆ LoopStrengthReduction() [3/3]
◆ ContainsMul()
| bool jlm::llvm::LoopStrengthReduction::ContainsMul |
( |
const rvsdg::Output & |
output | ) |
|
|
private |
Checks if the RVSDG subtree of the output contains an IntegerMulOperation or IntegerShlOperation (which we treat as multiplication by 2) somewhere in the tree.
- Parameters
-
| output | The output to be checked |
- Returns
- true if the subtree contains a multiplication operation, otherwise false.
Definition at line 723 of file LoopStrengthReduction.cpp.
◆ CreateNewArithmeticInductionVariable()
◆ CreateNewGEPInductionVariable()
◆ DependsOnInductionVariable()
| bool jlm::llvm::LoopStrengthReduction::DependsOnInductionVariable |
( |
const rvsdg::Output & |
output | ) |
|
|
private |
Checks if the operation depends on an induction variable. By induction variable we mean a loop variable that evolves in a predictable way, which is the same as checking if its chrec does not contain any SCEVUnknown or SCEVInit elements.
- Parameters
-
| output | The output to be checked |
- Returns
- true if the output depends on an induction variable, otherwise false.
Definition at line 689 of file LoopStrengthReduction.cpp.
◆ HoistChrec()
◆ HoistSCEVExpresssion()
◆ IsValidCandidateOperation()
◆ operator=() [1/2]
◆ operator=() [2/2]
◆ ProcessOutput()
◆ ProcessRegion()
| void jlm::llvm::LoopStrengthReduction::ProcessRegion |
( |
rvsdg::Region & |
region | ) |
|
|
private |
◆ ReduceStrength()
| void jlm::llvm::LoopStrengthReduction::ReduceStrength |
( |
rvsdg::ThetaNode & |
thetaNode | ) |
|
|
private |
◆ ReplaceCandidateOperation()
◆ Run()
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
-
| module | RVSDG module the transformation is performed on. |
| statisticsCollector | Statistics collector for collecting transformation statistics. |
Implements jlm::rvsdg::Transformation.
Definition at line 129 of file LoopStrengthReduction.cpp.
◆ ChrecMap_
◆ ContainsMulMemo_
| std::unordered_map<const rvsdg::Output *, bool> jlm::llvm::LoopStrengthReduction::ContainsMulMemo_ |
|
private |
◆ Context_
| std::unique_ptr<Context> jlm::llvm::LoopStrengthReduction::Context_ |
|
private |
◆ DependsOnIVMemo_
| std::unordered_map<const rvsdg::Output *, bool> jlm::llvm::LoopStrengthReduction::DependsOnIVMemo_ |
|
private |
◆ SCEVMap_
| std::unordered_map<const rvsdg::Output *, std::unique_ptr<SCEV> > jlm::llvm::LoopStrengthReduction::SCEVMap_ |
|
private |
The documentation for this class was generated from the following files: