summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2016-05-12 00:20:19 +0000
committerJustin Bogner <mail@justinbogner.com>2016-05-12 00:20:19 +0000
commited4f37850eaa5ce04fcd3dae1d5a3d5f3ebb5091 (patch)
tree86765fd97b4545d6cec023aeee9e14d985b21e5a /llvm/lib/Target/ARM
parentf51af6c9cd5b3ffb3cce3dc3a5d60e500669d063 (diff)
downloadbcm5719-llvm-ed4f37850eaa5ce04fcd3dae1d5a3d5f3ebb5091.tar.gz
bcm5719-llvm-ed4f37850eaa5ce04fcd3dae1d5a3d5f3ebb5091.zip
SDAG: Clean up dangling nodes in ARMISelDAGToDAG::SelectImpl
When we convert to the void Select interface, leaving unreferenced nodes around won't be allowed anymore. Part of llvm.org/pr26808. llvm-svn: 269256
Diffstat (limited to 'llvm/lib/Target/ARM')
-rw-r--r--llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp b/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp
index e915085309a..8948a6716c6 100644
--- a/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp
+++ b/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp
@@ -1941,6 +1941,7 @@ SDNode *ARMDAGToDAGISel::SelectVLD(SDNode *N, bool isUpdating, unsigned NumVecs,
ReplaceUses(SDValue(N, NumVecs), SDValue(VLd, 1));
if (isUpdating)
ReplaceUses(SDValue(N, NumVecs + 1), SDValue(VLd, 2));
+ CurDAG->RemoveDeadNode(N);
return nullptr;
}
@@ -2207,6 +2208,7 @@ SDNode *ARMDAGToDAGISel::SelectVLDSTLane(SDNode *N, bool IsLoad,
ReplaceUses(SDValue(N, NumVecs), SDValue(VLdLn, 1));
if (isUpdating)
ReplaceUses(SDValue(N, NumVecs + 1), SDValue(VLdLn, 2));
+ CurDAG->RemoveDeadNode(N);
return nullptr;
}
@@ -2290,6 +2292,7 @@ SDNode *ARMDAGToDAGISel::SelectVLDDup(SDNode *N, bool isUpdating,
ReplaceUses(SDValue(N, NumVecs), SDValue(VLdDup, 1));
if (isUpdating)
ReplaceUses(SDValue(N, NumVecs + 1), SDValue(VLdDup, 2));
+ CurDAG->RemoveDeadNode(N);
return nullptr;
}
@@ -2621,6 +2624,7 @@ SDNode *ARMDAGToDAGISel::SelectCMP_SWAP(SDNode *N) {
ReplaceUses(SDValue(N, 0), SDValue(CmpSwap, 0));
ReplaceUses(SDValue(N, 1), SDValue(CmpSwap, 2));
+ CurDAG->RemoveDeadNode(N);
return nullptr;
}
@@ -2702,7 +2706,7 @@ SDNode *ARMDAGToDAGISel::SelectImpl(SDNode *N) {
ResNode=CurDAG->getMachineNode(ARM::LDRcp, dl, MVT::i32, MVT::Other,
Ops);
}
- ReplaceUses(SDValue(N, 0), SDValue(ResNode, 0));
+ ReplaceNode(N, ResNode);
return nullptr;
}
@@ -2939,6 +2943,7 @@ SDNode *ARMDAGToDAGISel::SelectImpl(SDNode *N) {
}
ReplaceUses(SDValue(N, 0),
SDValue(Chain.getNode(), Chain.getResNo()));
+ CurDAG->RemoveDeadNode(N);
return nullptr;
}
case ARMISD::VZIP: {
@@ -3281,6 +3286,7 @@ SDNode *ARMDAGToDAGISel::SelectImpl(SDNode *N) {
ReplaceUses(SDValue(N, 1), Result);
}
ReplaceUses(SDValue(N, 2), OutChain);
+ CurDAG->RemoveDeadNode(N);
return nullptr;
}
case Intrinsic::arm_stlexd:
OpenPOWER on IntegriCloud