(root)/
gcc-13.2.0/
gcc/
sel-sched-dump.h
       1  /* Instruction scheduling pass.  Log dumping infrastructure.
       2     Copyright (C) 2006-2023 Free Software Foundation, Inc.
       3  
       4  This file is part of GCC.
       5  
       6  GCC is free software; you can redistribute it and/or modify it under
       7  the terms of the GNU General Public License as published by the Free
       8  Software Foundation; either version 3, or (at your option) any later
       9  version.
      10  
      11  GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      12  WARRANTY; without even the implied warranty of MERCHANTABILITY or
      13  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      14  for more details.
      15  
      16  You should have received a copy of the GNU General Public License
      17  along with GCC; see the file COPYING3.  If not see
      18  <http://www.gnu.org/licenses/>.  */
      19  
      20  
      21  #ifndef GCC_SEL_SCHED_DUMP_H
      22  #define GCC_SEL_SCHED_DUMP_H
      23  
      24  
      25  
      26  /* These values control the dumping of control flow graph to the .dot file.  */
      27  enum sel_dump_cfg_def
      28    {
      29      /* Dump only current region.  */
      30      SEL_DUMP_CFG_CURRENT_REGION = 2,
      31  
      32      /* Dump note_list for this bb.  */
      33      SEL_DUMP_CFG_BB_NOTES_LIST = 4,
      34  
      35      /* Dump availability set from the bb header.  */
      36      SEL_DUMP_CFG_AV_SET = 8,
      37  
      38      /* Dump liveness set from the bb header.  */
      39      SEL_DUMP_CFG_LV_SET = 16,
      40  
      41      /* Dump insns of the given block.  */
      42      SEL_DUMP_CFG_BB_INSNS = 32,
      43  
      44      /* Show current fences when dumping cfg.  */
      45      SEL_DUMP_CFG_FENCES = 64,
      46  
      47      /* Show insn's seqnos when dumping cfg.  */
      48      SEL_DUMP_CFG_INSN_SEQNO = 128,
      49  
      50      /* Dump function name when dumping cfg.  */
      51      SEL_DUMP_CFG_FUNCTION_NAME = 256,
      52  
      53      /* Dump loop father number of the given bb.  */
      54      SEL_DUMP_CFG_BB_LOOP = 512,
      55  
      56      /* The default flags for cfg dumping.  */
      57      SEL_DUMP_CFG_FLAGS = (SEL_DUMP_CFG_CURRENT_REGION
      58                            | SEL_DUMP_CFG_BB_NOTES_LIST
      59                            | SEL_DUMP_CFG_AV_SET
      60                            | SEL_DUMP_CFG_LV_SET
      61                            | SEL_DUMP_CFG_BB_INSNS
      62                            | SEL_DUMP_CFG_FENCES
      63                            | SEL_DUMP_CFG_INSN_SEQNO
      64                            | SEL_DUMP_CFG_BB_LOOP)
      65    };
      66  
      67  /* These values control the dumping of insns containing in expressions.  */
      68  enum dump_insn_rtx_def
      69    {
      70      /* Dump insn's UID.  */
      71      DUMP_INSN_RTX_UID = 2,
      72  
      73      /* Dump insn's pattern.  */
      74      DUMP_INSN_RTX_PATTERN = 4,
      75  
      76      /* Dump insn's basic block number.  */
      77      DUMP_INSN_RTX_BBN = 8,
      78  
      79      /* Dump all of the above.  */
      80      DUMP_INSN_RTX_ALL = (DUMP_INSN_RTX_UID | DUMP_INSN_RTX_PATTERN
      81  			 | DUMP_INSN_RTX_BBN)
      82    };
      83  
      84  extern void dump_insn_rtx_1 (rtx, int);
      85  extern void dump_insn_rtx (rtx);
      86  extern void debug_insn_rtx (rtx);
      87  
      88  /* These values control dumping of vinsns.  The meaning of different fields
      89     of a vinsn is explained in sel-sched-ir.h.  */
      90  enum dump_vinsn_def
      91    {
      92      /* Dump the insn behind this vinsn.  */
      93      DUMP_VINSN_INSN_RTX = 2,
      94  
      95      /* Dump vinsn's type.  */
      96      DUMP_VINSN_TYPE = 4,
      97  
      98      /* Dump vinsn's count.  */
      99      DUMP_VINSN_COUNT = 8,
     100  
     101      /* Dump the cost (default latency) of the insn behind this vinsn.  */
     102      DUMP_VINSN_COST = 16,
     103  
     104      /* Dump all of the above.  */
     105      DUMP_VINSN_ALL = (DUMP_VINSN_INSN_RTX | DUMP_VINSN_TYPE | DUMP_VINSN_COUNT
     106  		      | DUMP_VINSN_COST)
     107    };
     108  
     109  extern void dump_vinsn_1 (vinsn_t, int);
     110  extern void dump_vinsn (vinsn_t);
     111  extern void debug_vinsn (vinsn_t);
     112  
     113  extern void debug (vinsn_def &ref);
     114  extern void debug (vinsn_def *ptr);
     115  extern void debug_verbose (vinsn_def &ref);
     116  extern void debug_verbose (vinsn_def *ptr);
     117  
     118  
     119  /* These values control dumping of expressions.  The meaning of the fields
     120     is explained in sel-sched-ir.h.  */
     121  enum dump_expr_def
     122    {
     123      /* Dump the vinsn behind this expression.  */
     124      DUMP_EXPR_VINSN = 2,
     125  
     126      /* Dump expression's SPEC parameter.  */
     127      DUMP_EXPR_SPEC = 4,
     128  
     129      /* Dump expression's priority.  */
     130      DUMP_EXPR_PRIORITY = 8,
     131  
     132      /* Dump the number of times this expression was scheduled.  */
     133      DUMP_EXPR_SCHED_TIMES = 16,
     134  
     135      /* Dump speculative status of the expression.  */
     136      DUMP_EXPR_SPEC_DONE_DS = 32,
     137  
     138      /* Dump the basic block number which originated this expression.  */
     139      DUMP_EXPR_ORIG_BB = 64,
     140  
     141      /* Dump expression's usefulness.  */
     142      DUMP_EXPR_USEFULNESS = 128,
     143  
     144      /* Dump all of the above.  */
     145      DUMP_EXPR_ALL = (DUMP_EXPR_VINSN | DUMP_EXPR_SPEC | DUMP_EXPR_PRIORITY
     146  		     | DUMP_EXPR_SCHED_TIMES | DUMP_EXPR_SPEC_DONE_DS
     147  		     | DUMP_EXPR_ORIG_BB | DUMP_EXPR_USEFULNESS)
     148    };
     149  
     150  extern void dump_expr_1 (expr_t, int);
     151  extern void dump_expr (expr_t);
     152  extern void debug_expr (expr_t);
     153  
     154  extern void debug (expr_def &ref);
     155  extern void debug (expr_def *ptr);
     156  extern void debug_verbose (expr_def &ref);
     157  extern void debug_verbose (expr_def *ptr);
     158  
     159  
     160  /* A enumeration for dumping flags of an insn.  The difference from
     161     dump_insn_rtx_def is that these fields are for insns in stream only.  */
     162  enum dump_insn_def
     163  {
     164    /* Dump expression of this insn.  */
     165    DUMP_INSN_EXPR = 2,
     166  
     167    /* Dump insn's seqno.  */
     168    DUMP_INSN_SEQNO = 4,
     169  
     170    /* Dump the cycle on which insn was scheduled.  */
     171    DUMP_INSN_SCHED_CYCLE = 8,
     172  
     173    /* Dump insn's UID.  */
     174    DUMP_INSN_UID = 16,
     175  
     176    /* Dump insn's pattern.  */
     177    DUMP_INSN_PATTERN = 32,
     178  
     179    /* Dump insn's basic block number.  */
     180    DUMP_INSN_BBN = 64,
     181  
     182    /* Dump all of the above.  */
     183    DUMP_INSN_ALL = (DUMP_INSN_EXPR | DUMP_INSN_SEQNO | DUMP_INSN_BBN
     184  		   | DUMP_INSN_SCHED_CYCLE | DUMP_INSN_UID | DUMP_INSN_PATTERN)
     185  };
     186  
     187  extern void dump_insn_1 (insn_t, int);
     188  extern void dump_insn (insn_t);
     189  extern void debug_insn (insn_t);
     190  
     191  /* When this flag is on, we are dumping to the .dot file.
     192     When it is off, we are dumping to log.  */
     193  extern bool sched_dump_to_dot_p;
     194  
     195  
     196  /* Functions from sel-sched-dump.cc.  */
     197  extern void sel_print (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
     198  extern const char * sel_print_insn (const rtx_insn *, int);
     199  extern void free_sel_dump_data (void);
     200  
     201  extern void block_start (void);
     202  extern void block_finish (void);
     203  extern int get_print_blocks_num (void);
     204  extern void line_start (void);
     205  extern void line_finish (void);
     206  
     207  extern void sel_print_rtl (rtx x);
     208  extern void dump_insn_1 (insn_t, int);
     209  extern void dump_insn (insn_t);
     210  extern void dump_insn_vector (rtx_vec_t);
     211  extern void dump_expr (expr_t);
     212  extern void dump_used_regs (bitmap);
     213  extern void dump_av_set (av_set_t);
     214  extern void dump_lv_set (regset);
     215  extern void dump_blist (blist_t);
     216  extern void dump_flist (flist_t);
     217  extern void dump_hard_reg_set (const char *, HARD_REG_SET);
     218  extern void sel_debug_cfg_1 (int);
     219  extern void sel_debug_cfg (void);
     220  extern void setup_dump_cfg_params (void);
     221  
     222  /* Debug functions.  */
     223  extern void debug_expr (expr_t);
     224  extern void debug_av_set (av_set_t);
     225  extern void debug_lv_set (regset);
     226  extern void debug_ilist (ilist_t);
     227  extern void debug_blist (blist_t);
     228  extern void debug (vec<rtx> &ref);
     229  extern void debug (vec<rtx> *ptr);
     230  extern void debug_insn_vector (rtx_vec_t);
     231  extern void debug_hard_reg_set (HARD_REG_SET);
     232  extern rtx debug_mem_addr_value (rtx);
     233  #endif