[gcc r17-2363] Show UNSPEC names on slim rtl dump

Nathan Sidwell via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:951a115cda17352b1801e30fa9aab3e69caa8452

commit r17-2363-g951a115cda17352b1801e30fa9aab3e69caa8452
Author: Nathan Sidwell <[email protected]>
Date:   Fri Jul 10 14:21:38 2026 -0400

    Show UNSPEC names on slim rtl dump
    
            gcc/
            * print-rtl.cc (rtx_writer::print_rtx_operand_code_i): Don't
            fallback to UNSPEC enums if there are any UNSPECV enums.
            (print_exp): Print unspec/unspecv name, when available.

Diff:
---
 gcc/print-rtl.cc | 38 +++++++++++++++++++++++++++++++++++---
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/gcc/print-rtl.cc b/gcc/print-rtl.cc
index 8123e2abe80c..b969c6d82299 100644
--- a/gcc/print-rtl.cc
+++ b/gcc/print-rtl.cc
@@ -508,7 +508,11 @@ rtx_writer::print_rtx_operand_code_i (const_rtx in_rtx, int idx)
 #if !defined(GENERATOR_FILE) && NUM_UNSPEC_VALUES > 0
   else if (idx == 1
 	   && (GET_CODE (in_rtx) == UNSPEC
-	       || GET_CODE (in_rtx) == UNSPEC_VOLATILE)
+#if !(NUM_UNSPECV_VALUES > 0)
+	       // Only accept unspec_volatiles, if there's no unspecv enum.
+	       || GET_CODE (in_rtx) == UNSPEC_VOLATILE
+#endif
+	       || false)
 	   && XINT (in_rtx, 1) >= 0
 	   && XINT (in_rtx, 1) < NUM_UNSPEC_VALUES)
     fprintf (m_outfile, " %s", unspec_strings[XINT (in_rtx, 1)]);
@@ -1610,8 +1614,36 @@ print_exp (pretty_printer *pp, const_rtx x, int verbose)
 	      pp_comma (pp);
 	    print_pattern (pp, XVECEXP (x, 0, i), verbose);
 	  }
-	pp_string (pp, "] ");
-	pp_decimal_int (pp, XINT (x, 1));
+	pp_string (pp, "]");
+	const char *str = nullptr;
+	auto unspec = XINT (x, 1);
+#if !defined(GENERATOR_FILE)
+	if (unspec < 0)
+	  ;
+#if NUM_UNSPECV_VALUES > 0
+	else if (GET_CODE (x) == UNSPEC_VOLATILE
+		 && unspec < NUM_UNSPECV_VALUES)
+	  str = unspecv_strings[unspec];
+#endif
+#if NUM_UNSPEC_VALUES > 0
+	else if (true
+#if NUM_UNSPECV_VALUES > 0
+		 // Only accept unspec_volatiles, if there's no unspecv enum.
+		 && GET_CODE (x) == UNSPEC
+#endif
+		 && unspec < NUM_UNSPEC_VALUES)
+	  str = unspec_strings[unspec];
+#endif
+#endif
+	if (str)
+	  {
+	    // Strip leading UNSPEC[_] leaving FOO or V_FOO by convention.
+	    if (0 == strncmp (str, "UNSPEC", 6))
+	      str += 6 + (str[6] == '_');
+	    pp_string (pp, str);
+	  }
+	else
+	  pp_decimal_int (pp, unspec);
       }
       break;
     default:
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.