diff options
author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-02-16 18:53:04 +0000 |
---|---|---|
committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2017-02-16 18:53:04 +0000 |
commit | 84cd4ea3017181ae21ecfc836af9f9ca0f5aeccd (patch) | |
tree | def06dade92903f47ce69ff80616d7ec151e4b6b /llvm/lib/Target/Hexagon/RDFGraph.h | |
parent | 077081d4d5b38326c39d244a853e74ee6824074e (diff) | |
download | bcm5719-llvm-84cd4ea3017181ae21ecfc836af9f9ca0f5aeccd.tar.gz bcm5719-llvm-84cd4ea3017181ae21ecfc836af9f9ca0f5aeccd.zip |
[RDF] Differentiate between defining and clobbering nodes
Defining nodes should not alias with one another, while clobbering
nodes can. When pushing defs on stacks, push clobbers first, link
non-clobbering defs, then push the defs.
The data flow in a statement is now: uses -> clobbers -> defs.
llvm-svn: 295356
Diffstat (limited to 'llvm/lib/Target/Hexagon/RDFGraph.h')
-rw-r--r-- | llvm/lib/Target/Hexagon/RDFGraph.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/Hexagon/RDFGraph.h b/llvm/lib/Target/Hexagon/RDFGraph.h index 92c317c4d3c..bf4018ba7fc 100644 --- a/llvm/lib/Target/Hexagon/RDFGraph.h +++ b/llvm/lib/Target/Hexagon/RDFGraph.h @@ -729,7 +729,7 @@ namespace rdf { typedef std::unordered_map<RegisterId,DefStack> DefStackMap; void build(unsigned Options = BuildOptions::None); - void pushDefs(NodeAddr<InstrNode*> IA, DefStackMap &DM); + void pushAllDefs(NodeAddr<InstrNode*> IA, DefStackMap &DM); void markBlock(NodeId B, DefStackMap &DefM); void releaseBlock(NodeId B, DefStackMap &DefM); @@ -844,9 +844,12 @@ namespace rdf { NodeAddr<BlockNode*> BA); void removeUnusedPhis(); + void pushClobbers(NodeAddr<InstrNode*> IA, DefStackMap &DM); + void pushDefs(NodeAddr<InstrNode*> IA, DefStackMap &DM); template <typename T> void linkRefUp(NodeAddr<InstrNode*> IA, NodeAddr<T> TA, DefStack &DS); - void linkStmtRefs(DefStackMap &DefM, NodeAddr<StmtNode*> SA); + template <typename Predicate> void linkStmtRefs(DefStackMap &DefM, + NodeAddr<StmtNode*> SA, Predicate P); void linkBlockRefs(DefStackMap &DefM, NodeAddr<BlockNode*> BA); void unlinkUseDF(NodeAddr<UseNode*> UA); |