aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/Target/Hexagon/RDFDeadCode.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2023-09-02 21:17:18 +0000
committerDimitry Andric <dim@FreeBSD.org>2023-12-08 17:34:50 +0000
commit06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e (patch)
tree62f873df87c7c675557a179e0c4c83fe9f3087bc /contrib/llvm-project/llvm/lib/Target/Hexagon/RDFDeadCode.cpp
parentcf037972ea8863e2bab7461d77345367d2c1e054 (diff)
parent7fa27ce4a07f19b07799a767fc29416f3b625afb (diff)
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/Hexagon/RDFDeadCode.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/Target/Hexagon/RDFDeadCode.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/Hexagon/RDFDeadCode.cpp b/contrib/llvm-project/llvm/lib/Target/Hexagon/RDFDeadCode.cpp
index 894bdf38fe17..d90923d6d3ed 100644
--- a/contrib/llvm-project/llvm/lib/Target/Hexagon/RDFDeadCode.cpp
+++ b/contrib/llvm-project/llvm/lib/Target/Hexagon/RDFDeadCode.cpp
@@ -55,7 +55,8 @@ private:
// overly conservative (i.e. return "true" for all instructions), but it
// is not safe to return "false" for an instruction that should not be
// considered removable.
-bool DeadCodeElimination::isLiveInstr(const MachineInstr *MI) const {
+bool DeadCodeElimination::isLiveInstr(NodeAddr<StmtNode *> S) const {
+ const MachineInstr *MI = S.Addr->getCode();
if (MI->mayStore() || MI->isBranch() || MI->isCall() || MI->isReturn())
return true;
if (MI->hasOrderedMemoryRef() || MI->hasUnmodeledSideEffects() ||
@@ -83,7 +84,7 @@ void DeadCodeElimination::scanInstr(NodeAddr<InstrNode*> IA,
SetQueue<NodeId> &WorkQ) {
if (!DFG.IsCode<NodeAttrs::Stmt>(IA))
return;
- if (!isLiveInstr(NodeAddr<StmtNode*>(IA).Addr->getCode()))
+ if (!isLiveInstr(IA))
return;
for (NodeAddr<RefNode*> RA : IA.Addr->members(DFG)) {
if (!LiveNodes.count(RA.Id))
@@ -160,7 +161,7 @@ bool DeadCodeElimination::collect() {
if (!LiveNodes.count(RA.Id))
DeadNodes.insert(RA.Id);
if (DFG.IsCode<NodeAttrs::Stmt>(IA))
- if (isLiveInstr(NodeAddr<StmtNode*>(IA).Addr->getCode()))
+ if (isLiveInstr(IA) || DFG.hasUntrackedRef(IA))
continue;
if (IsDead(IA)) {
DeadInstrs.insert(IA.Id);