Commit 677aa9b4 by David Malcolm Committed by David Malcolm

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

gcc/ChangeLog:
	* 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.

From-SVN: r242023
parent 410fe60d
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> 2016-11-09 Uros Bizjak <ubizjak@gmail.com>
PR target/78262 PR target/78262
...@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h" #include "langhooks.h"
#include "memmodel.h" #include "memmodel.h"
#include "emit-rtl.h" #include "emit-rtl.h"
#include "varasm.h"
/* Print an "(edge-from)" or "(edge-to)" directive describing E /* Print an "(edge-from)" or "(edge-to)" directive describing E
to OUTFILE. */ to OUTFILE. */
...@@ -127,6 +128,37 @@ can_have_basic_block_p (const rtx_insn *insn) ...@@ -127,6 +128,37 @@ can_have_basic_block_p (const rtx_insn *insn)
return true; 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 /* 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 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 the basic blocks of insns in the chain, wrapping those that are within
...@@ -197,6 +229,10 @@ print_rtx_function (FILE *outfile, function *fn, bool compact) ...@@ -197,6 +229,10 @@ print_rtx_function (FILE *outfile, function *fn, bool compact)
fprintf (outfile, "(function \"%s\"\n", dname); 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. */ /* The instruction chain. */
fprintf (outfile, " (insn-chain\n"); fprintf (outfile, " (insn-chain\n");
basic_block curr_bb = NULL; basic_block curr_bb = NULL;
......
...@@ -804,6 +804,15 @@ rtx_writer::print_rtx (const_rtx in_rtx) ...@@ -804,6 +804,15 @@ rtx_writer::print_rtx (const_rtx in_rtx)
m_sawclose = 1; 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 /* Print an rtx on the current line of FILE. Initially indent IND
characters. */ characters. */
......
...@@ -31,6 +31,8 @@ class rtx_writer ...@@ -31,6 +31,8 @@ class rtx_writer
void print_rtl (const_rtx rtx_first); void print_rtl (const_rtx rtx_first);
int print_rtl_single_with_indent (const_rtx x, int ind); int print_rtl_single_with_indent (const_rtx x, int ind);
void finish_directive ();
private: private:
void print_rtx_operand_code_0 (const_rtx in_rtx, int idx); void print_rtx_operand_code_0 (const_rtx in_rtx, int idx);
void print_rtx_operand_code_e (const_rtx in_rtx, int idx); void print_rtx_operand_code_e (const_rtx in_rtx, int idx);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment