|
Jlm
|

Public Member Functions | |
| LoadTracingInfo (rvsdg::SimpleNode &loadNode, OutputTracer &tracer, aa::AliasAnalysis &aliasAnalysis) | |
| bool | traceAllMemoryStateInputs () |
Public Attributes | |
| rvsdg::SimpleNode & | loadNode |
| rvsdg::Output * | loadedAddress |
| std::shared_ptr< const rvsdg::Type > | loadedType |
| size_t | loadedTypeSize |
| OutputTracer & | tracer |
| aa::AliasAnalysis & | aliasAnalysis |
| size_t | numNoAliasAnalysisQueries = 0 |
| size_t | numMayAliasAnalysisQueries = 0 |
| size_t | numMustAliasAnalysisQueries = 0 |
| std::unordered_map< rvsdg::SimpleNode *, StoreNodeInfo > | storeNodeInfo |
| std::unordered_map< rvsdg::Input *, StoreValueOrigin > | lastStoreBeforeInput |
| std::unordered_map< rvsdg::Node *, StoreValueOrigin > | lastStoreBeforeNode |
| std::unordered_map< rvsdg::Region *, StoreValueOrigin > | lastStoreInRegion |
| util::HashSet< rvsdg::Input * > | loopVarPostsToTrace |
| std::unordered_map< rvsdg::GammaNode *, rvsdg::Output * > | createdExitVars |
| std::unordered_map< rvsdg::ThetaNode *, rvsdg::ThetaNode::LoopVar > | createdLoopVars |
| std::queue< rvsdg::Input * > | unroutedLoopVarPosts |
Private Member Functions | |
| aa::AliasAnalysis::AliasQueryResponse | queryAliasAnalysis (rvsdg::SimpleNode &storeNode) |
| StoreValueOrigin | getLastStoreBeforeInput (rvsdg::Input &input) |
| StoreValueOrigin | getLastStoreBeforeInputInternal (rvsdg::Input &input) |
| void | updateAliasAnalysisQueryCounters (aa::AliasAnalysis::AliasQueryResponse response) |
Helper class holding info during tracing of the memory states going to a given load node. Can trace into structural nodes, and keep track of separate store nodes for separate regions. If all branches lead to a store that can be forwarded, forwarding can be performed.
Definition at line 320 of file StoreValueForwarding.cpp.
|
inline |
Definition at line 323 of file StoreValueForwarding.cpp.
|
inlineprivate |
Attempts to trace the given memory state input back to a store node that can be forwarded. If a store node that may alias the load is encountered, unknown is returned. If structural nodes are encountered, all branches are traced. If any of the branches are not traceable, unknown is returned. If the branches lead to different store nodes, the structural node itself is returned.
During tracing, the class keeps track of the last store before nodes and region exits. If tracing different memory state chains lead to different "last store node before X", store forwarding is not possible, and unknown is returned to terminate early.
| input | the memory state input to trace from |
Definition at line 421 of file StoreValueForwarding.cpp.
|
inlineprivate |
Definition at line 457 of file StoreValueForwarding.cpp.
|
inlineprivate |
Performs a simple alias analysis query between the loadNode and the given store node, to determine if they read and write from the same exact address, possibly interfere, or if the operations are guaranteed to be fully independent.
| storeNode | the StoreOperation node |
Definition at line 387 of file StoreValueForwarding.cpp.
|
inline |
Performs tracing of memory states to find store node(s) that can be forwarded to the load. If tracing leads to nodes that may or may not clobber the load, or if different memory state inputs lead to different store node(s), store value forwarding is not possible, and false is returned. Different branches of structural nodes can lead to different store nodes, as long as all memory states lead to the same store node in each branch.
Definition at line 347 of file StoreValueForwarding.cpp.
|
inlineprivate |
Definition at line 627 of file StoreValueForwarding.cpp.
| aa::AliasAnalysis& jlm::llvm::LoadTracingInfo::aliasAnalysis |
Definition at line 652 of file StoreValueForwarding.cpp.
| std::unordered_map<rvsdg::GammaNode *, rvsdg::Output *> jlm::llvm::LoadTracingInfo::createdExitVars |
Definition at line 676 of file StoreValueForwarding.cpp.
| std::unordered_map<rvsdg::ThetaNode *, rvsdg::ThetaNode::LoopVar> jlm::llvm::LoadTracingInfo::createdLoopVars |
Definition at line 678 of file StoreValueForwarding.cpp.
| std::unordered_map<rvsdg::Input *, StoreValueOrigin> jlm::llvm::LoadTracingInfo::lastStoreBeforeInput |
Definition at line 663 of file StoreValueForwarding.cpp.
| std::unordered_map<rvsdg::Node *, StoreValueOrigin> jlm::llvm::LoadTracingInfo::lastStoreBeforeNode |
Definition at line 665 of file StoreValueForwarding.cpp.
| std::unordered_map<rvsdg::Region *, StoreValueOrigin> jlm::llvm::LoadTracingInfo::lastStoreInRegion |
Definition at line 668 of file StoreValueForwarding.cpp.
| rvsdg::Output* jlm::llvm::LoadTracingInfo::loadedAddress |
Definition at line 647 of file StoreValueForwarding.cpp.
| std::shared_ptr<const rvsdg::Type> jlm::llvm::LoadTracingInfo::loadedType |
Definition at line 648 of file StoreValueForwarding.cpp.
| size_t jlm::llvm::LoadTracingInfo::loadedTypeSize |
Definition at line 649 of file StoreValueForwarding.cpp.
| rvsdg::SimpleNode& jlm::llvm::LoadTracingInfo::loadNode |
Definition at line 646 of file StoreValueForwarding.cpp.
| util::HashSet<rvsdg::Input *> jlm::llvm::LoadTracingInfo::loopVarPostsToTrace |
Definition at line 673 of file StoreValueForwarding.cpp.
| size_t jlm::llvm::LoadTracingInfo::numMayAliasAnalysisQueries = 0 |
Definition at line 656 of file StoreValueForwarding.cpp.
| size_t jlm::llvm::LoadTracingInfo::numMustAliasAnalysisQueries = 0 |
Definition at line 657 of file StoreValueForwarding.cpp.
| size_t jlm::llvm::LoadTracingInfo::numNoAliasAnalysisQueries = 0 |
Definition at line 655 of file StoreValueForwarding.cpp.
| std::unordered_map<rvsdg::SimpleNode *, StoreNodeInfo> jlm::llvm::LoadTracingInfo::storeNodeInfo |
Definition at line 660 of file StoreValueForwarding.cpp.
| OutputTracer& jlm::llvm::LoadTracingInfo::tracer |
Definition at line 651 of file StoreValueForwarding.cpp.
| std::queue<rvsdg::Input *> jlm::llvm::LoadTracingInfo::unroutedLoopVarPosts |
Definition at line 680 of file StoreValueForwarding.cpp.