(v2) print-rtl-function.c: add (param) directive to dump
diff mbox

Message ID 1478726039.7673.21.camel@redhat.com
State New
Headers show

Commit Message

David Malcolm Nov. 9, 2016, 9:13 p.m. UTC
On Wed, 2016-11-09 at 17:46 +0100, Bernd Schmidt wrote:
> On 11/09/2016 05:46 PM, David Malcolm wrote:
> 
> > OK for trunk if it passes bootstrap and regrtest?
> > 
> > gcc/ChangeLog:
> > 	* print-rtl-function.c (print_any_param_name): New function.
> > 	(print_param): New function.
> > 	(print_rtx_function): Call print_param for each argument.
> > 	* print-rtl.c (rtx_writer::finish_directive): New function.
> > 	* print-rtl.h (rtx_writer::finish_directive): New decl.
> > +
> > +  rtx decl_rtl = DECL_WRTL_CHECK (arg)->decl_with_rtl.rtl;
> 
> Isn't this DECL_RTL_IF_SET? If so, please use that macro. Otherwise 
> ok.

Yes, it is; thanks.  Using it required including varasm.h.

For reference, here's what I committed, as r242023 (having verified
 bootstrap and regrtest).

Patch
diff mbox

Index: gcc/ChangeLog
===================================================================
--- gcc/ChangeLog	(revision 242022)
+++ gcc/ChangeLog	(revision 242023)
@@ -1,3 +1,12 @@ 
+2016-11-09  David Malcolm  <dmalcolm@redhat.com>
+
+	* print-rtl-function.c: Include varasm.h.
+	(print_any_param_name): New function.
+	(print_param): New function.
+	(print_rtx_function): Call print_param for each argument.
+	* print-rtl.c (rtx_writer::finish_directive): New function.
+	* print-rtl.h (rtx_writer::finish_directive): New decl.
+
 2016-11-09  Uros Bizjak  <ubizjak@gmail.com>
 
 	PR target/78262
Index: gcc/print-rtl.c
===================================================================
--- gcc/print-rtl.c	(revision 242022)
+++ gcc/print-rtl.c	(revision 242023)
@@ -804,6 +804,15 @@ 
   m_sawclose = 1;
 }
 
+/* Emit a closing parenthesis and newline.  */
+
+void
+rtx_writer::finish_directive ()
+{
+  fprintf (m_outfile, ")\n");
+  m_sawclose = 0;
+}
+
 /* Print an rtx on the current line of FILE.  Initially indent IND
    characters.  */
 
Index: gcc/print-rtl.h
===================================================================
--- gcc/print-rtl.h	(revision 242022)
+++ gcc/print-rtl.h	(revision 242023)
@@ -31,6 +31,8 @@ 
   void print_rtl (const_rtx rtx_first);
   int print_rtl_single_with_indent (const_rtx x, int ind);
 
+  void finish_directive ();
+
  private:
   void print_rtx_operand_code_0 (const_rtx in_rtx, int idx);
   void print_rtx_operand_code_e (const_rtx in_rtx, int idx);
Index: gcc/print-rtl-function.c
===================================================================
--- gcc/print-rtl-function.c	(revision 242022)
+++ gcc/print-rtl-function.c	(revision 242023)
@@ -33,6 +33,7 @@ 
 #include "langhooks.h"
 #include "memmodel.h"
 #include "emit-rtl.h"
+#include "varasm.h"
 
 /* Print an "(edge-from)" or "(edge-to)" directive describing E
    to OUTFILE.  */
@@ -127,6 +128,37 @@ 
   return true;
 }
 
+/* Subroutine of print_param.  Write the name of ARG, if any, to OUTFILE.  */
+
+static void
+print_any_param_name (FILE *outfile, tree arg)
+{
+  if (DECL_NAME (arg))
+    fprintf (outfile, " \"%s\"", IDENTIFIER_POINTER (DECL_NAME (arg)));
+}
+
+/* Print a "(param)" directive for ARG to OUTFILE.  */
+
+static void
+print_param (FILE *outfile, rtx_writer &w, tree arg)
+{
+  fprintf (outfile, "  (param");
+  print_any_param_name (outfile, arg);
+  fprintf (outfile, "\n");
+
+  /* Print the value of DECL_RTL (without lazy-evaluation).  */
+  fprintf (outfile, "    (DECL_RTL ");
+  w.print_rtx (DECL_RTL_IF_SET (arg));
+  w.finish_directive ();
+
+  /* Print DECL_INCOMING_RTL.  */
+  fprintf (outfile, "    (DECL_RTL_INCOMING ");
+  w.print_rtx (DECL_INCOMING_RTL (arg));
+  fprintf (outfile, ")");
+
+  w.finish_directive ();
+}
+
 /* Write FN to OUTFILE in a form suitable for parsing, with indentation
    and comments to make the structure easy for a human to grok.  Track
    the basic blocks of insns in the chain, wrapping those that are within
@@ -197,6 +229,10 @@ 
 
   fprintf (outfile, "(function \"%s\"\n", dname);
 
+  /* Params.  */
+  for (tree arg = DECL_ARGUMENTS (fdecl); arg; arg = DECL_CHAIN (arg))
+    print_param (outfile, w, arg);
+
   /* The instruction chain.  */
   fprintf (outfile, "  (insn-chain\n");
   basic_block curr_bb = NULL;