GCC Middle and Back End API Reference
region-model-manager.h
Go to the documentation of this file.
1/* Consolidation of svalues and regions.
2 Copyright (C) 2020-2024 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 3, or (at your option)
10any later version.
11
12GCC is distributed in the hope that it will be useful, but
13WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
20
21#ifndef GCC_ANALYZER_REGION_MODEL_MANAGER_H
22#define GCC_ANALYZER_REGION_MODEL_MANAGER_H
23
24namespace ana {
25
26/* A class responsible for owning and consolidating region and svalue
27 instances.
28 region and svalue instances are immutable as far as clients are
29 concerned, so they are provided as "const" ptrs. */
30
32{
33public:
36
37 unsigned get_num_symbols () const { return m_next_symbol_id; }
38 unsigned alloc_symbol_id () { return m_next_symbol_id++; }
39
40 /* call_string consolidation. */
42 {
44 }
45
46 /* svalue consolidation. */
50 const svalue *get_or_create_null_ptr (tree pointer_type);
53 tree type);
55 tree type);
57 bool check_poisoned = true);
58 const svalue *get_ptr_svalue (tree ptr_type, const region *pointee);
60 const svalue *arg);
63 enum tree_code op,
64 const svalue *arg0, const svalue *arg1);
66 const svalue *parent_svalue,
67 const region *subregion);
69 const svalue *outer_size,
70 const svalue *inner_svalue);
72 const bit_range &bits,
73 const svalue *inner_svalue);
76 const function_point &point,
77 const svalue *base_svalue,
78 const svalue *iter_svalue);
80 const binding_map &map);
82 const region *id_reg,
83 const conjured_purge &p,
84 unsigned idx = 0);
85 const svalue *
87 const gasm *asm_stmt,
88 unsigned output_idx,
89 const vec<const svalue *> &inputs);
90 const svalue *
92 const char *asm_string,
93 unsigned output_idx,
94 unsigned num_outputs,
95 const vec<const svalue *> &inputs);
96 const svalue *
98 tree fndecl,
99 const vec<const svalue *> &inputs);
100
102 tree byte_offset_cst);
103
104 /* Dynamically-allocated svalue instances.
105 The number of these within the analysis can grow arbitrarily.
106 They are still owned by the manager. */
108
109 /* region consolidation. */
110 const root_region *get_root_region () const { return &m_root_region; }
111 const stack_region * get_stack_region () const { return &m_stack_region; }
112 const heap_region *get_heap_region () const { return &m_heap_region; }
113 const code_region *get_code_region () const { return &m_code_region; }
115 {
116 return &m_globals_region;
117 }
118 const errno_region *get_errno_region () const { return &m_errno_region; }
122 const region *get_field_region (const region *parent, tree field);
123 const region *get_element_region (const region *parent,
124 tree element_type,
125 const svalue *index);
126 const region *get_offset_region (const region *parent,
127 tree type,
128 const svalue *byte_offset);
129 const region *get_sized_region (const region *parent,
130 tree type,
131 const svalue *byte_size_sval);
132 const region *get_cast_region (const region *original_region,
133 tree type);
134 const frame_region *get_frame_region (const frame_region *calling_frame,
135 const function &fun);
136 const region *get_symbolic_region (const svalue *sval);
138 const region *get_bit_range (const region *parent, tree type,
139 const bit_range &bits);
141 unsigned idx);
142
144
145 const region *
147 tree t,
148 const dump_location_t &loc);
149
152
157
158 /* Dynamically-allocated region instances.
159 The number of these within the analysis can grow arbitrarily.
160 They are still owned by the manager. */
161 const region *
164
165 void log_stats (logger *logger, bool show_objs) const;
166
169
170 logger *get_logger () const { return m_logger; }
171
173
175 const svalue *arg0, const svalue *arg1);
176private:
177 bool too_complex_p (const complexity &c) const;
179
181 const svalue *arg);
183 const svalue *parent_svalue,
184 const region *subregion);
186 const svalue *outer_size,
187 const svalue *inner_svalue);
189 const bit_range &bits,
190 const svalue *inner_svalue);
192 const compound_svalue *compound_sval,
193 tree cst, const svalue *arg1);
195 const vec<const svalue *> &inputs);
196
198
200
202
206
207 /* svalue consolidation. */
210
214
218
222
225
228
232
235
238
242
246
247 typedef hash_map<const svalue *,
250
252 widening_svalue */*,
253 widening_svalue::key_t::hash_map_traits*/>
256
260
264
268
272
274
275 /* "Dynamically-allocated" svalue instances.
276 The number of these within the analysis can grow arbitrarily.
277 They are still owned by the manager. */
279
280 /* Maximum complexity of svalues that weren't rejected. */
282
283 /* region consolidation. */
284
287 typedef fndecls_map_t::iterator fndecls_iterator_t;
289
291 typedef labels_map_t::iterator labels_iterator_t;
293
296 typedef globals_map_t::iterator globals_iterator_t;
298
301
309
312
315
317
319
321
322 /* "Dynamically-allocated" region instances.
323 The number of these within the analysis can grow arbitrarily.
324 They are still owned by the manager. */
326};
327
328} // namespace ana
329
330#endif /* GCC_ANALYZER_REGION_MODEL_MANAGER_H */
Definition svalue.h:1623
Definition store.h:508
Definition svalue.h:1070
Definition constraint-manager.h:181
Definition call-string.h:48
Definition region.h:453
Definition svalue.h:1389
Definition svalue.h:1490
Definition svalue.h:1521
Definition svalue.h:1769
Definition region.h:742
Definition region.h:1488
Definition region.h:319
Definition program-point.h:73
Definition region.h:481
Definition region.h:425
Definition region.h:583
Definition known-function-manager.h:41
Definition region.h:520
Definition analyzer-logging.h:34
Definition svalue.h:445
Definition region-model.h:718
Definition region-model-manager.h:32
hash_map< const svalue *, unmergeable_svalue * > unmergeable_values_map_t
Definition region-model-manager.h:248
hash_map< binop_svalue::key_t, binop_svalue * > binop_values_map_t
Definition region-model-manager.h:233
initial_values_map_t m_initial_values_map
Definition region-model-manager.h:224
known_function_manager m_known_fn_mgr
Definition region-model-manager.h:320
const function_region * get_region_for_fndecl(tree fndecl)
const svalue * get_or_create_cast(tree type, const svalue *arg)
asm_output_values_map_t m_asm_output_values_map
Definition region-model-manager.h:267
bool reject_if_too_complex(svalue *sval)
const region * get_field_region(const region *parent, tree field)
consolidation_map< offset_region > m_offset_regions
Definition region-model-manager.h:304
const svalue * maybe_fold_unaryop(tree type, enum tree_code op, const svalue *arg)
errno_region m_errno_region
Definition region-model-manager.h:300
const svalue * get_or_create_int_cst(tree type, const poly_wide_int_ref &cst)
const code_region * get_code_region() const
Definition region-model-manager.h:113
consolidation_map< var_arg_region > m_var_arg_regions
Definition region-model-manager.h:314
const svalue * get_or_create_bits_within(tree type, const bit_range &bits, const svalue *inner_svalue)
hash_map< const region *, initial_svalue * > initial_values_map_t
Definition region-model-manager.h:223
auto_delete_vec< svalue > m_managed_dynamic_svalues
Definition region-model-manager.h:278
hash_map< unaryop_svalue::key_t, unaryop_svalue * > unaryop_values_map_t
Definition region-model-manager.h:230
const svalue * create_unique_svalue(tree type)
const svalue * maybe_fold_bits_within_svalue(tree type, const bit_range &bits, const svalue *inner_svalue)
pointer_values_map_t m_pointer_values_map
Definition region-model-manager.h:227
const region * create_region_for_alloca(const frame_region *frame)
bool m_checking_feasibility
Definition region-model-manager.h:273
const svalue * get_or_create_initial_value(const region *reg, bool check_poisoned=true)
const svalue * get_or_create_binop(tree type, enum tree_code op, const svalue *arg0, const svalue *arg1)
hash_map< tree, unknown_svalue * > unknowns_map_t
Definition region-model-manager.h:211
const svalue * maybe_get_char_from_string_cst(tree string_cst, tree byte_offset_cst)
bounded_ranges_manager * m_range_mgr
Definition region-model-manager.h:318
code_region m_code_region
Definition region-model-manager.h:285
const region * get_element_region(const region *parent, tree element_type, const svalue *index)
const svalue * get_or_create_widening_svalue(tree type, const function_point &point, const svalue *base_svalue, const svalue *iter_svalue)
compound_values_map_t m_compound_values_map
Definition region-model-manager.h:259
setjmp_values_map_t m_setjmp_values_map
Definition region-model-manager.h:221
consolidation_map< frame_region > m_frame_regions
Definition region-model-manager.h:307
const errno_region * get_errno_region() const
Definition region-model-manager.h:118
const_fn_result_values_map_t m_const_fn_result_values_map
Definition region-model-manager.h:271
const region * get_bit_range(const region *parent, tree type, const bit_range &bits)
consolidation_map< symbolic_region > m_symbolic_regions
Definition region-model-manager.h:308
const region * get_symbolic_region(const svalue *sval)
labels_map_t::iterator labels_iterator_t
Definition region-model-manager.h:291
const svalue * maybe_fold_asm_output_svalue(tree type, const vec< const svalue * > &inputs)
bool too_complex_p(const complexity &c) const
hash_map< bits_within_svalue::key_t, bits_within_svalue * > bits_within_values_map_t
Definition region-model-manager.h:244
consolidation_map< cast_region > m_cast_regions
Definition region-model-manager.h:306
const svalue * get_ptr_svalue(tree ptr_type, const region *pointee)
hash_map< sub_svalue::key_t, sub_svalue * > sub_values_map_t
Definition region-model-manager.h:236
fndecls_map_t m_fndecls_map
Definition region-model-manager.h:288
sub_values_map_t m_sub_values_map
Definition region-model-manager.h:237
const unknown_svalue * m_unknown_NULL
Definition region-model-manager.h:213
unaryop_values_map_t m_unaryop_values_map
Definition region-model-manager.h:231
unsigned m_next_symbol_id
Definition region-model-manager.h:199
conjured_values_map_t m_conjured_values_map
Definition region-model-manager.h:263
hash_map< tree, decl_region * > globals_map_t
Definition region-model-manager.h:295
widening_values_map_t m_widening_values_map
Definition region-model-manager.h:255
const heap_region * get_heap_region() const
Definition region-model-manager.h:112
const region * get_region_for_unexpected_tree_code(region_model_context *ctxt, tree t, const dump_location_t &loc)
bounded_ranges_manager * get_range_manager() const
Definition region-model-manager.h:151
void log_stats(logger *logger, bool show_objs) const
binop_values_map_t m_binop_values_map
Definition region-model-manager.h:234
hash_map< const_fn_result_svalue::key_t, const_fn_result_svalue * > const_fn_result_values_map_t
Definition region-model-manager.h:270
globals_map_t m_globals_map
Definition region-model-manager.h:297
constants_map_t m_constants_map
Definition region-model-manager.h:209
const globals_region * get_globals_region() const
Definition region-model-manager.h:114
const region * get_or_create_region_for_heap_alloc(const bitmap &base_regs_in_use)
string_map_t m_string_map
Definition region-model-manager.h:311
poisoned_values_map_t m_poisoned_values_map
Definition region-model-manager.h:217
const svalue * get_or_create_constant_svalue(tree cst_expr)
store_manager * get_store_manager()
Definition region-model-manager.h:150
globals_map_t::iterator globals_iterator_t
Definition region-model-manager.h:296
consolidation_map< sized_region > m_sized_regions
Definition region-model-manager.h:305
const call_string m_empty_call_string
Definition region-model-manager.h:201
bits_within_values_map_t m_bits_within_values_map
Definition region-model-manager.h:245
logger * get_logger() const
Definition region-model-manager.h:170
const svalue * maybe_fold_repeated_svalue(tree type, const svalue *outer_size, const svalue *inner_svalue)
fndecls_map_t::iterator fndecls_iterator_t
Definition region-model-manager.h:287
hash_map< asm_output_svalue::key_t, asm_output_svalue * > asm_output_values_map_t
Definition region-model-manager.h:266
void end_checking_feasibility(void)
Definition region-model-manager.h:168
const stack_region * get_stack_region() const
Definition region-model-manager.h:111
hash_map< tree, label_region * > labels_map_t
Definition region-model-manager.h:290
const string_region * get_region_for_string(tree string_cst)
hash_map< repeated_svalue::key_t, repeated_svalue * > repeated_values_map_t
Definition region-model-manager.h:240
const root_region * get_root_region() const
Definition region-model-manager.h:110
hash_map< constant_svalue::key_t, constant_svalue * > constants_map_t
Definition region-model-manager.h:208
const svalue * get_or_create_constant_svalue(tree type, tree cst_expr)
root_region m_root_region
Definition region-model-manager.h:203
const svalue * get_or_create_setjmp_svalue(const setjmp_record &r, tree type)
consolidation_map< field_region > m_field_regions
Definition region-model-manager.h:302
const svalue * maybe_fold_binop(tree type, enum tree_code op, const svalue *arg0, const svalue *arg1)
consolidation_map< bit_range_region > m_bit_range_regions
Definition region-model-manager.h:313
hash_map< region_svalue::key_t, region_svalue * > pointer_values_map_t
Definition region-model-manager.h:226
hash_map< compound_svalue::key_t, compound_svalue * > compound_values_map_t
Definition region-model-manager.h:258
const label_region * get_region_for_label(tree label)
heap_region m_heap_region
Definition region-model-manager.h:205
const svalue * get_or_create_const_fn_result_svalue(tree type, tree fndecl, const vec< const svalue * > &inputs)
const region * get_offset_region(const region *parent, tree type, const svalue *byte_offset)
const frame_region * get_frame_region(const frame_region *calling_frame, const function &fun)
const svalue * get_or_create_compound_svalue(tree type, const binding_map &map)
hash_map< setjmp_svalue::key_t, setjmp_svalue * > setjmp_values_map_t
Definition region-model-manager.h:220
consolidation_map< element_region > m_element_regions
Definition region-model-manager.h:303
repeated_values_map_t m_repeated_values_map
Definition region-model-manager.h:241
store_manager m_store_mgr
Definition region-model-manager.h:316
const svalue * get_or_create_poisoned_svalue(enum poison_kind kind, tree type)
hash_map< tree, string_region * > string_map_t
Definition region-model-manager.h:310
void begin_checking_feasibility(void)
Definition region-model-manager.h:167
unknowns_map_t m_unknowns_map
Definition region-model-manager.h:212
const svalue * get_or_create_null_ptr(tree pointer_type)
const decl_region * get_region_for_global(tree expr)
const call_string & get_empty_call_string() const
Definition region-model-manager.h:41
globals_region m_globals_region
Definition region-model-manager.h:294
auto_delete_vec< region > m_managed_dynamic_regions
Definition region-model-manager.h:325
const svalue * get_or_create_asm_output_svalue(tree type, const gasm *asm_stmt, unsigned output_idx, const vec< const svalue * > &inputs)
known_function_manager * get_known_function_manager()
Definition region-model-manager.h:153
const svalue * get_or_create_asm_output_svalue(tree type, const char *asm_string, unsigned output_idx, unsigned num_outputs, const vec< const svalue * > &inputs)
hash_map< poisoned_svalue::key_t, poisoned_svalue * > poisoned_values_map_t
Definition region-model-manager.h:216
hash_map< tree, function_region * > fndecls_map_t
Definition region-model-manager.h:286
const svalue * maybe_undo_optimize_bit_field_compare(tree type, const compound_svalue *compound_sval, tree cst, const svalue *arg1)
const svalue * get_or_create_unmergeable(const svalue *arg)
const svalue * maybe_fold_sub_svalue(tree type, const svalue *parent_svalue, const region *subregion)
const region * get_sized_region(const region *parent, tree type, const svalue *byte_size_sval)
stack_region m_stack_region
Definition region-model-manager.h:204
region_model_manager(logger *logger=NULL)
const svalue * get_or_create_conjured_svalue(tree type, const gimple *stmt, const region *id_reg, const conjured_purge &p, unsigned idx=0)
const var_arg_region * get_var_arg_region(const frame_region *parent, unsigned idx)
logger * m_logger
Definition region-model-manager.h:197
unmergeable_values_map_t m_unmergeable_values_map
Definition region-model-manager.h:249
hash_map< conjured_svalue::key_t, conjured_svalue * > conjured_values_map_t
Definition region-model-manager.h:262
const region * get_unknown_symbolic_region(tree region_type)
thread_local_region m_thread_local_region
Definition region-model-manager.h:299
const svalue * get_or_create_unknown_svalue(tree type)
void dump_untracked_regions() const
const svalue * get_or_create_repeated_svalue(tree type, const svalue *outer_size, const svalue *inner_svalue)
unsigned alloc_symbol_id()
Definition region-model-manager.h:38
unsigned get_num_symbols() const
Definition region-model-manager.h:37
const svalue * get_or_create_sub_svalue(tree type, const svalue *parent_svalue, const region *subregion)
const region * get_cast_region(const region *original_region, tree type)
complexity m_max_complexity
Definition region-model-manager.h:281
const svalue * get_or_create_unaryop(tree type, enum tree_code op, const svalue *arg)
labels_map_t m_labels_map
Definition region-model-manager.h:292
hash_map< widening_svalue::key_t, widening_svalue @endverbatim * > widening_values_map_t
Definition region-model-manager.h:254
Definition region.h:126
Definition svalue.h:974
Definition region.h:638
Definition svalue.h:559
Definition region.h:555
Definition store.h:861
Definition region.h:1276
Definition svalue.h:92
Definition region.h:610
Definition svalue.h:693
Definition svalue.h:395
Definition svalue.h:1172
Definition region.h:1406
Definition svalue.h:1267
Definition vec.h:1802
Definition analyzer.h:529
Definition dumpfile.h:446
Definition genmatch.cc:1496
Definition hash-map.h:40
Definition poly-int.h:378
class bitmap_head * bitmap
Definition coretypes.h:51
union tree_node * tree
Definition coretypes.h:97
static struct string2counter_map map[debug_counter_number_of_counters]
Definition dbgcnt.cc:39
void verbatim(const char *,...) ATTRIBUTE_GCC_DIAG(1
tree_code
Definition genmatch.cc:992
Definition access-diagram.h:30
poison_kind
Definition svalue.h:425
poly_int< N, C > r
Definition poly-int.h:774
Definition svalue.h:1631
Definition store.h:233
Definition svalue.h:1074
Definition complexity.h:31
Definition svalue.h:1397
Definition svalue.h:1525
Definition svalue.h:1777
Definition svalue.h:449
Definition svalue.h:978
Definition svalue.h:529
Definition svalue.h:563
Definition svalue.h:697
Definition svalue.h:1271
Definition function.h:249
Definition gimple.h:546
Definition gimple.h:221
Definition gengtype.h:252
Definition vec.h:450
#define NULL
Definition system.h:50