LCOV - code coverage report
Current view: top level - gcc/rtl-ssa - internals.h Coverage Total Hit
Test: gcc.info Lines: 100.0 % 1 1
Test Date: 2026-02-28 14:20:25 Functions: - 0 0
Legend: Lines:     hit not hit

            Line data    Source code
       1              : // Definition of private classes for RTL SSA                        -*- C++ -*-
       2              : // Copyright (C) 2020-2026 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              : namespace rtl_ssa {
      21              : 
      22              : // Information about a basic block's phi nodes.  This class is only used when
      23              : // constructing the SSA form, it isn't meant to be kept up-to-date.
      24     76734318 : class function_info::bb_phi_info
      25              : {
      26              : public:
      27              :   // The set of registers that need phi nodes.
      28              :   bitmap_head regs;
      29              : 
      30              :   // The number of registers in REGS.
      31              :   unsigned int num_phis;
      32              : 
      33              :   // The number of inputs to each phi node.  Caching the information here
      34              :   // is at best a minor optimisation, but it fills a 32-bit hole that would
      35              :   // otherwise exist on 64-bit hosts.
      36              :   unsigned int num_preds;
      37              : 
      38              :   // An array of all the phi inputs for this block.  It lists all inputs
      39              :   // from the first incoming edge followed by all inputs for the next
      40              :   // incoming edge, and so on.  The inputs for a given edge are sorted
      41              :   // by increasing register number.
      42              :   set_info **inputs;
      43              : };
      44              : 
      45              : // Information used while constructing the SSA form and discarded
      46              : // afterwards.
      47              : class function_info::build_info
      48              : {
      49              : public:
      50              :   build_info (unsigned int, unsigned int);
      51              :   ~build_info ();
      52              : 
      53              :   set_info *current_reg_value (unsigned int) const;
      54              :   set_info *current_mem_value () const;
      55              : 
      56              :   void record_reg_def (def_info *);
      57              :   void record_mem_def (def_info *);
      58              : 
      59              :   // The block that we're currently processing.
      60              :   bb_info *current_bb;
      61              : 
      62              :   // The EBB that contains CURRENT_BB.
      63              :   ebb_info *current_ebb;
      64              : 
      65              :   // Except for the local exception noted below:
      66              :   //
      67              :   // - If register R has been defined in the current EBB, LAST_ACCESS[R + 1]
      68              :   //   is the last definition of R in the EBB.
      69              :   //
      70              :   // - Otherwise, if the current EBB is dominated by a definition of R,
      71              :   //   LAST_ACCESS[R + 1] is the nearest dominating definition.
      72              :   //
      73              :   // - Otherwise, LAST_ACCESS[R + 1] is null.
      74              :   //
      75              :   // Similarly:
      76              :   //
      77              :   // - If the current EBB has defined memory, LAST_ACCESS[0] is the last
      78              :   //   definition of memory in the EBB.
      79              :   //
      80              :   // - Otherwise LAST_ACCESS[0] is the value of memory that is live on
      81              :   // - entry to the EBB.
      82              :   //
      83              :   // The exception is that while building instructions, LAST_ACCESS[I]
      84              :   // can temporarily be the use of regno I - 1 by that instruction.
      85              :   auto_vec<access_info *> last_access;
      86              : 
      87              :   // A bitmap used to hold EBB_LIVE_IN_FOR_DEBUG.
      88              :   auto_bitmap tmp_ebb_live_in_for_debug;
      89              : 
      90              :   // If nonnull, a bitmap of registers that are live on entry to this EBB,
      91              :   // with a tree view for quick lookup.  This bitmap is calculated lazily
      92              :   // and is only used if MAY_HAVE_DEBUG_INSNS.
      93              :   bitmap ebb_live_in_for_debug;
      94              : 
      95              :   // The set of registers that might need to have phis associated with them.
      96              :   // Registers outside this set are known to have a single definition that
      97              :   // dominates all uses.
      98              :   //
      99              :   // Before RA, about 5% of registers are typically in the set.
     100              :   auto_sbitmap potential_phi_regs;
     101              : 
     102              :   // A sparse bitmap representation of POTENTIAL_PHI_REGS.  Only used if
     103              :   // MAY_HAVE_DEBUG_INSNS.
     104              :   auto_bitmap potential_phi_regs_for_debug;
     105              : 
     106              :   // The set of registers that have been defined so far in the current EBB.
     107              :   auto_bitmap ebb_def_regs;
     108              : 
     109              :   // BB_PHIS[B] describes the phis for basic block B.
     110              :   auto_vec<bb_phi_info> bb_phis;
     111              : 
     112              :   // BB_MEM_LIVE_OUT[B] is the memory value that is live on exit from
     113              :   // basic block B.
     114              :   auto_vec<set_info *> bb_mem_live_out;
     115              : 
     116              :   // BB_TO_RPO[B] gives the position of block B in a reverse postorder
     117              :   // of the CFG.  The RPO is a tweaked version of the one normally
     118              :   // returned by pre_and_rev_post_order_compute, with all blocks in
     119              :   // an EBB having consecutive positions.
     120              :   auto_vec<int> bb_to_rpo;
     121              : 
     122              :   // This stack is divided into sections, with one section for the
     123              :   // current basic block and one section for each dominating block.
     124              :   // Each element is a register definition.
     125              :   //
     126              :   // If the section for block B contains a definition D of a register R,
     127              :   // then one of two things is true:
     128              :   //
     129              :   // - D occurs in B and no definition of R dominates B.
     130              :   // - D dominates B and is the nearest dominating definition of R.
     131              :   //
     132              :   // The two cases are distinguished by the value of D->bb ().
     133              :   auto_vec<def_info *> def_stack;
     134              : 
     135              :   // The top of this stack records the start of the current block's
     136              :   // section in DEF_STACK.
     137              :   auto_vec<unsigned int> old_def_stack_limit;
     138              : 
     139              :   // The block that dominates the exit block, or null if the exit block
     140              :   // is unreachable.
     141              :   basic_block exit_block_dominator;
     142              : };
     143              : 
     144              : }
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.