aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2023-10-24 11:30:52 +0100
committerRichard Sandiford <richard.sandiford@arm.com>2023-10-24 11:30:52 +0100
commitc97b167e35774e5add4d1079b552383d3fea62dc (patch)
treefd6d95ae6e121932f1137bf415a27da9840e4619
parent50313dcdf3324db6d6e522fcaa6ff94dd5de6d3f (diff)
downloadgcc-c97b167e35774e5add4d1079b552383d3fea62dc.zip
gcc-c97b167e35774e5add4d1079b552383d3fea62dc.tar.gz
gcc-c97b167e35774e5add4d1079b552383d3fea62dc.tar.bz2
rtl-ssa: Fix handling of deleted insns
RTL-SSA queues up some invasive changes for later. But sometimes the insns involved in those changes can be deleted by later optimisations, making the queued change unnecessary. This patch checks for that case. gcc/ * rtl-ssa/changes.cc (function_info::perform_pending_updates): Check whether an insn has been replaced by a note.
-rw-r--r--gcc/rtl-ssa/changes.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/rtl-ssa/changes.cc b/gcc/rtl-ssa/changes.cc
index 73ab3cc..de6222a 100644
--- a/gcc/rtl-ssa/changes.cc
+++ b/gcc/rtl-ssa/changes.cc
@@ -983,7 +983,10 @@ function_info::perform_pending_updates ()
for (insn_info *insn : m_queued_insn_updates)
{
rtx_insn *rtl = insn->rtl ();
- if (JUMP_P (rtl))
+ if (NOTE_P (rtl))
+ // The insn was later optimized away, typically to a NOTE_INSN_DELETED.
+ ;
+ else if (JUMP_P (rtl))
{
if (INSN_CODE (rtl) == NOOP_MOVE_INSN_CODE)
{