1 // Definition of private classes for RTL SSA                        -*- C++ -*-
2 // Copyright (C) 2020-2022 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 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 
140 }
141