aboutsummaryrefslogtreecommitdiff
path: root/gcc/print-rtl.h
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2016-10-26 16:51:53 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2016-10-26 16:51:53 +0000
commit36cd856fc3b61ba3a32133be0e3e53e550191e54 (patch)
tree0586bc9cd9225510a43cb652d3705d953a3cf226 /gcc/print-rtl.h
parent3bbe0b82a1adb4b8ebaeb64d501baec386c0463e (diff)
downloadgcc-36cd856fc3b61ba3a32133be0e3e53e550191e54.zip
gcc-36cd856fc3b61ba3a32133be0e3e53e550191e54.tar.gz
gcc-36cd856fc3b61ba3a32133be0e3e53e550191e54.tar.bz2
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
Diffstat (limited to 'gcc/print-rtl.h')
-rw-r--r--gcc/print-rtl.h39
1 files changed, 38 insertions, 1 deletions
diff --git a/gcc/print-rtl.h b/gcc/print-rtl.h
index 8dfba8b..4ebfcf9 100644
--- a/gcc/print-rtl.h
+++ b/gcc/print-rtl.h
@@ -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);