https://gcc.gnu.org/g:34e1e5e33ec3eb475c0c8278800b6fc246a86763

commit r16-1613-g34e1e5e33ec3eb475c0c8278800b6fc246a86763
Author: Jeff Law <j...@ventanamicro.com>
Date:   Sun Jun 22 12:06:08 2025 -0600

    [committed][PR rtl-optimization/120550] Drop REG_EQUAL note after ext-dce 
transformation
    
    This bug was found by Edwin's fuzzing efforts on RISC-V, though it likely
    affects other targets.
    
    In simplest terms when ext-dce converts an extension into a (possibly
    simplified) subreg copy it may make an attached REG_EQUAL note invalid.
    
    In the case Edwin found the note was an extension, but I don't think that 
would
    necessarily always be the case.  The note could have other forms which
    potentially need invalidation.  So the safest thing to do is just remove any
    attached REG_EQUAL or REG_EQUIV note.
    
    Note adjusting Edwin's testcase in the obvious way to avoid having to 
interpret
    printf output for pass/fail status makes the bug go latent.  That's why no
    testcase is included with this patch.
    
    Bootstrapped and regression tested on x86_64.  Obviously also verified it 
fixes
    the testcase Edwin filed.
    
    This is a good candidate for cherry-picking to the gcc-15 release branch 
after
    simmering on the trunk a bit.
    
            PR rtl-optimization/120550
    gcc/
            * ext-dce.cc (ext_dce_try_optimize_insn): Drop REG_EQUAL/REG_EQUIV
            notes on modified insns.

Diff:
---
 gcc/ext-dce.cc | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gcc/ext-dce.cc b/gcc/ext-dce.cc
index aa80c0483d61..b1d5ee4b36c4 100644
--- a/gcc/ext-dce.cc
+++ b/gcc/ext-dce.cc
@@ -442,6 +442,11 @@ ext_dce_try_optimize_insn (rtx_insn *insn, rtx set)
          print_rtl_single (dump_file, new_pattern);
          fprintf (dump_file, "\n");
        }
+
+      /* INSN may have a REG_EQUAL note indicating that the value was
+        sign or zero extended.  That note is no longer valid since we've
+        just removed the extension.  Just wipe the notes.  */
+      remove_reg_equal_equiv_notes (insn, true);
     }
   else
     {

Reply via email to