summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Hexagon/RDFGraph.h
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2016-01-18 20:41:34 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2016-01-18 20:41:34 +0000
commit69e670d5f996e2d1c0e4300aec4b41cc2ec24dcb (patch)
treeb26909b722268b09e9394196f1bf65cc56ca69af /llvm/lib/Target/Hexagon/RDFGraph.h
parenteb85b04c7eccad93706d7e7e319a34597f521ac6 (diff)
downloadbcm5719-llvm-69e670d5f996e2d1c0e4300aec4b41cc2ec24dcb.tar.gz
bcm5719-llvm-69e670d5f996e2d1c0e4300aec4b41cc2ec24dcb.zip
[RDF] Allow unlinking ref nodes from data-flow chains only
llvm-svn: 258073
Diffstat (limited to 'llvm/lib/Target/Hexagon/RDFGraph.h')
-rw-r--r--llvm/lib/Target/Hexagon/RDFGraph.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/Target/Hexagon/RDFGraph.h b/llvm/lib/Target/Hexagon/RDFGraph.h
index 7da7bb5973c..7a673847d8f 100644
--- a/llvm/lib/Target/Hexagon/RDFGraph.h
+++ b/llvm/lib/Target/Hexagon/RDFGraph.h
@@ -697,8 +697,16 @@ namespace rdf {
NodeList getRelatedRefs(NodeAddr<InstrNode*> IA,
NodeAddr<RefNode*> RA) const;
- void unlinkUse(NodeAddr<UseNode*> UA);
- void unlinkDef(NodeAddr<DefNode*> DA);
+ void unlinkUse(NodeAddr<UseNode*> UA, bool RemoveFromOwner) {
+ unlinkUseDF(UA);
+ if (RemoveFromOwner)
+ removeFromOwner(UA);
+ }
+ void unlinkDef(NodeAddr<DefNode*> DA, bool RemoveFromOwner) {
+ unlinkDefDF(DA);
+ if (RemoveFromOwner)
+ removeFromOwner(DA);
+ }
// Some useful filters.
template <uint16_t Kind>
@@ -765,6 +773,13 @@ namespace rdf {
void linkStmtRefs(DefStackMap &DefM, NodeAddr<StmtNode*> SA);
void linkBlockRefs(DefStackMap &DefM, NodeAddr<BlockNode*> BA);
+ void unlinkUseDF(NodeAddr<UseNode*> UA);
+ void unlinkDefDF(NodeAddr<DefNode*> DA);
+ void removeFromOwner(NodeAddr<RefNode*> RA) {
+ NodeAddr<InstrNode*> IA = RA.Addr->getOwner(*this);
+ IA.Addr->removeMember(RA, *this);
+ }
+
TimerGroup TimeG;
NodeAddr<FuncNode*> Func;
NodeAllocator Memory;
OpenPOWER on IntegriCloud