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
This commit is contained in:
parent
410fe60d14
commit
677aa9b4b7
|
@ -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
|
||||
|
|
|
@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#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 @@ can_have_basic_block_p (const rtx_insn *insn)
|
|||
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 @@ print_rtx_function (FILE *outfile, function *fn, bool compact)
|
|||
|
||||
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;
|
||||
|
|
|
@ -804,6 +804,15 @@ rtx_writer::print_rtx (const_rtx in_rtx)
|
|||
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. */
|
||||
|
||||
|
|
|
@ -31,6 +31,8 @@ class rtx_writer
|
|||
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);
|
||||
|
|
Loading…
Reference in New Issue