GCC Middle and Back End API Reference
|
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"
#include "rtl.h"
#include "alias.h"
#include "tree.h"
#include "flags.h"
#include "predict.h"
#include "function.h"
#include "basic-block.h"
#include "print-rtl.h"
#include "langhooks.h"
#include "memmodel.h"
#include "emit-rtl.h"
#include "varasm.h"
#include "cfg-flags.def"
Macros | |
#define | DEF_EDGE_FLAG(NAME, IDX) |
Functions | |
static void | print_edge (FILE *outfile, edge e, bool from) |
static void | begin_any_block (FILE *outfile, basic_block bb) |
static void | end_any_block (FILE *outfile, basic_block bb) |
static bool | can_have_basic_block_p (const rtx_insn *insn) |
static void | print_any_param_name (FILE *outfile, tree arg) |
static void | print_param (FILE *outfile, rtx_writer &w, tree arg) |
DEBUG_FUNCTION void | print_rtx_function (FILE *outfile, function *fn, bool compact) |
|
static |
If BB is non-NULL, print the start of a "(block)" directive for it to OUTFILE, otherwise do nothing.
References FOR_EACH_EDGE, ggc_alloc(), basic_block_def::index, basic_block_def::preds, and print_edge().
Referenced by print_rtx_function().
Determine if INSN is of a kind that can have a basic block.
References gcc_assert, GET_CODE, GET_RTX_FORMAT, and ggc_alloc().
Referenced by print_rtx_function().
|
static |
If BB is non-NULL, print the end of a "(block)" directive for it to OUTFILE, otherwise do nothing.
References FOR_EACH_EDGE, ggc_alloc(), basic_block_def::index, print_edge(), and basic_block_def::succs.
Referenced by print_rtx_function().
Subroutine of print_param. Write the name of ARG, if any, to OUTFILE.
References DECL_NAME, ggc_alloc(), and IDENTIFIER_POINTER.
Referenced by print_param().
Print RTL functions for GCC. Copyright (C) 2016-2024 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Print an "(edge-from)" or "(edge-to)" directive describing E to OUTFILE.
References ENTRY_BLOCK, EXIT_BLOCK, gcc_assert, and ggc_alloc().
Referenced by begin_any_block(), and end_any_block().
|
static |
Print a "(param)" directive for ARG to OUTFILE.
References DECL_INCOMING_RTL, DECL_RTL_IF_SET, ggc_alloc(), and print_any_param_name().
Referenced by print_rtx_function().
DEBUG_FUNCTION void print_rtx_function | ( | FILE * | outfile, |
function * | fn, | ||
bool | compact ) |
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 blocks within "(block)" directives. If COMPACT, then instructions are printed in a compact form: - 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) Example output (with COMPACT==true): (function "times_two" (param "i" (DECL_RTL (mem/c:SI (plus:DI (reg/f:DI virtual-stack-vars) (const_int -4)) [1 i+0 S4 A32])) (DECL_RTL_INCOMING (reg:SI di [ i ]))) (insn-chain (cnote 1 NOTE_INSN_DELETED) (block 2 (edge-from entry (flags "FALLTHRU")) (cnote 4 [bb 2] NOTE_INSN_BASIC_BLOCK) (cinsn 2 (set (mem/c:SI (plus:DI (reg/f:DI virtual-stack-vars) (const_int -4)) [1 i+0 S4 A32]) (reg:SI di [ i ])) "t.c":2) (cnote 3 NOTE_INSN_FUNCTION_BEG) (cinsn 6 (set (reg:SI <2>) (mem/c:SI (plus:DI (reg/f:DI virtual-stack-vars) (const_int -4)) [1 i+0 S4 A32])) "t.c":3) (cinsn 7 (parallel [ (set (reg:SI <0> [ _2 ]) (ashift:SI (reg:SI <2>) (const_int 1))) (clobber (reg:CC flags)) ]) "t.c":3 (expr_list:REG_EQUAL (ashift:SI (mem/c:SI (plus:DI (reg/f:DI virtual-stack-vars) (const_int -4)) [1 i+0 S4 A32]) (const_int 1)))) (cinsn 10 (set (reg:SI <1> [ <retval> ]) (reg:SI <0> [ _2 ])) "t.c":3) (cinsn 14 (set (reg/i:SI ax) (reg:SI <1> [ <retval> ])) "t.c":4) (cinsn 15 (use (reg/i:SI ax)) "t.c":4) (edge-to exit (flags "FALLTHRU")) ) ;; block 2 ) ;; insn-chain (crtl (return_rtx (reg/i:SI ax) ) ;; return_rtx ) ;; crtl ) ;; function "times_two"
References begin_any_block(), BLOCK_FOR_INSN(), can_have_basic_block_p(), crtl, curr_bb, function::decl, DECL_ARGUMENTS, DECL_CHAIN, lang_hooks::decl_printable_name, end_any_block(), get_insns(), ggc_alloc(), NEXT_INSN(), NULL, print_param(), and r.