Commit 36cd856f by David Malcolm Committed by David Malcolm

Introduce class rtx_writer

gcc/ChangeLog:
	* print-rtl-function.c (print_rtx_function): Rewrite in terms of
	class rtx_writer.
	* print-rtl.c (outfile): Delete global.
	(sawclose): Likewise.
	(indent): Likewise.
	(in_call_function_usage): Likewise.
	(flag_compact): Likewise.
	(flag_simple): Likewise.
	(rtx_writer::rtx_writer): New ctor.
	(print_rtx_operand_code_0): Convert to...
	(rtx_writer::print_rtx_operand_code_0): ...this.
	(print_rtx_operand_code_e): Convert to...
	(rtx_writer::print_rtx_operand_code_e): ...this.
	(print_rtx_operand_codes_E_and_V): Convert to...
	(rtx_writer::print_rtx_operand_codes_E_and_V): ...this.
	(print_rtx_operand_code_i): Convert to...
	(rtx_writer::print_rtx_operand_code_i): ...this.
	(print_rtx_operand_code_r): Convert to...
	(rtx_writer::print_rtx_operand_code_r): ...this.
	(print_rtx_operand_code_u): Convert to...
	(rtx_writer::print_rtx_operand_code_u): ...this.
	(print_rtx_operand): Convert to...
	(rtx_writer::print_rtx_operand): ...this.
	(print_rtx): Convert to...
	(rtx_writer::print_rtx): ...this.
	(print_inline_rtx): Rewrite in terms of class rtx_writer.
	(debug_rtx): Likewise.
	(print_rtl): Convert to...
	(rtx_writer::print_rtl): ...this.
	(print_rtl): Reimplement in terms of class rtx_writer.
	(print_rtl_single): Rewrite in terms of class rtx_writer.
	(print_rtl_single_with_indent): Convert to..
	(rtx_writer::print_rtl_single_with_indent): ...this.
	(print_simple_rtl): Rewrite in terms of class rtx_writer.
	* print-rtl.h (flag_compact): Delete decl.
	(class rtx_writer): New class.
	* rtl-tests.c (selftest::assert_rtl_dump_eq): Rewrite in terms of
	class rtx_writer.

From-SVN: r241586
parent 3bbe0b82
2016-10-26 David Malcolm <dmalcolm@redhat.com>
* print-rtl-function.c (print_rtx_function): Rewrite in terms of
class rtx_writer.
* print-rtl.c (outfile): Delete global.
(sawclose): Likewise.
(indent): Likewise.
(in_call_function_usage): Likewise.
(flag_compact): Likewise.
(flag_simple): Likewise.
(rtx_writer::rtx_writer): New ctor.
(print_rtx_operand_code_0): Convert to...
(rtx_writer::print_rtx_operand_code_0): ...this.
(print_rtx_operand_code_e): Convert to...
(rtx_writer::print_rtx_operand_code_e): ...this.
(print_rtx_operand_codes_E_and_V): Convert to...
(rtx_writer::print_rtx_operand_codes_E_and_V): ...this.
(print_rtx_operand_code_i): Convert to...
(rtx_writer::print_rtx_operand_code_i): ...this.
(print_rtx_operand_code_r): Convert to...
(rtx_writer::print_rtx_operand_code_r): ...this.
(print_rtx_operand_code_u): Convert to...
(rtx_writer::print_rtx_operand_code_u): ...this.
(print_rtx_operand): Convert to...
(rtx_writer::print_rtx_operand): ...this.
(print_rtx): Convert to...
(rtx_writer::print_rtx): ...this.
(print_inline_rtx): Rewrite in terms of class rtx_writer.
(debug_rtx): Likewise.
(print_rtl): Convert to...
(rtx_writer::print_rtl): ...this.
(print_rtl): Reimplement in terms of class rtx_writer.
(print_rtl_single): Rewrite in terms of class rtx_writer.
(print_rtl_single_with_indent): Convert to..
(rtx_writer::print_rtl_single_with_indent): ...this.
(print_simple_rtl): Rewrite in terms of class rtx_writer.
* print-rtl.h (flag_compact): Delete decl.
(class rtx_writer): New class.
* rtl-tests.c (selftest::assert_rtl_dump_eq): Rewrite in terms of
class rtx_writer.
2016-10-26 Jeff Law <law@redhat.com>
* config/arc/arc.c (acr_print_operand): Adjust fallthru comment.
......
......@@ -189,7 +189,7 @@ can_have_basic_block_p (const rtx_insn *insn)
DEBUG_FUNCTION void
print_rtx_function (FILE *outfile, function *fn, bool compact)
{
flag_compact = compact;
rtx_writer w (outfile, 0, false, compact);
tree fdecl = fn->decl;
......@@ -213,7 +213,7 @@ print_rtx_function (FILE *outfile, function *fn, bool compact)
curr_bb = insn_bb;
begin_any_block (outfile, curr_bb);
}
print_rtl_single_with_indent (outfile, insn, curr_bb ? 6 : 4);
w.print_rtl_single_with_indent (insn, curr_bb ? 6 : 4);
}
end_any_block (outfile, curr_bb);
fprintf (outfile, " ) ;; insn-chain\n");
......@@ -221,11 +221,9 @@ print_rtx_function (FILE *outfile, function *fn, bool compact)
/* Additional RTL state. */
fprintf (outfile, " (crtl\n");
fprintf (outfile, " (return_rtx \n");
print_rtl_single_with_indent (outfile, crtl->return_rtx, 6);
w.print_rtl_single_with_indent (crtl->return_rtx, 6);
fprintf (outfile, " ) ;; return_rtx\n");
fprintf (outfile, " ) ;; crtl\n");
fprintf (outfile, ") ;; function \"%s\"\n", dname);
flag_compact = false;
}
......@@ -20,7 +20,44 @@ along with GCC; see the file COPYING3. If not see
#ifndef GCC_PRINT_RTL_H
#define GCC_PRINT_RTL_H
extern bool flag_compact;
/* A class for writing rtx to a FILE *. */
class rtx_writer
{
public:
rtx_writer (FILE *outfile, int ind, bool simple, bool compact);
void print_rtx (const_rtx in_rtx);
void print_rtl (const_rtx rtx_first);
int print_rtl_single_with_indent (const_rtx x, int ind);
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);
void print_rtx_operand_codes_E_and_V (const_rtx in_rtx, int idx);
void print_rtx_operand_code_i (const_rtx in_rtx, int idx);
void print_rtx_operand_code_r (const_rtx in_rtx);
void print_rtx_operand_code_u (const_rtx in_rtx, int idx);
void print_rtx_operand (const_rtx in_rtx, int idx);
private:
FILE *m_outfile;
int m_sawclose;
int m_indent;
bool m_in_call_function_usage;
/* True means use simplified format without flags, modes, etc. */
bool m_simple;
/* If true, use compact dump format:
- INSN_UIDs are omitted, except for jumps and CODE_LABELs,
- INSN_CODEs are omitted,
- register numbers are omitted for hard and virtual regs, and
non-virtual pseudos are offset relative to the first such reg, and
printed with a '%' sigil e.g. "%0" for (LAST_VIRTUAL_REGISTER + 1),
- insn names are prefixed with "c" (e.g. "cinsn", "cnote", etc). */
bool m_compact;
};
#ifdef BUFSIZ
extern void print_rtl (FILE *, const_rtx);
......
......@@ -65,9 +65,8 @@ assert_rtl_dump_eq (const location &loc, const char *expected_dump, rtx x)
{
named_temp_file tmp_out (".rtl");
FILE *outfile = fopen (tmp_out.get_filename (), "w");
flag_compact = true;
print_rtl (outfile, x);
flag_compact = false;
rtx_writer w (outfile, 0, false, true);
w.print_rtl (x);
fclose (outfile);
char *dump = read_file (SELFTEST_LOCATION, tmp_out.get_filename ());
......
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