]>
Commit | Line | Data |
---|---|---|
8bd73801 | 1 | /* Support routines for Value Range Propagation (VRP). |
fbd26352 | 2 | Copyright (C) 2016-2019 Free Software Foundation, Inc. |
8bd73801 | 3 | |
4 | This file is part of GCC. | |
5 | ||
6 | GCC is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 3, or (at your option) | |
9 | any later version. | |
10 | ||
11 | GCC is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License 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 | #ifndef GCC_GIMPLE_SSA_EVRP_ANALYZE_H | |
21 | #define GCC_GIMPLE_SSA_EVRP_ANALYZE_H | |
22 | ||
23 | class evrp_range_analyzer | |
24 | { | |
25 | public: | |
447602ef | 26 | evrp_range_analyzer (bool update_global_ranges); |
c561e1e7 | 27 | ~evrp_range_analyzer (void) |
28 | { | |
29 | delete vr_values; | |
30 | stack.release (); | |
31 | } | |
8bd73801 | 32 | |
33 | void enter (basic_block); | |
4b69806c | 34 | void push_marker (void); |
35 | void pop_to_marker (void); | |
8bd73801 | 36 | void leave (basic_block); |
4b69806c | 37 | void record_ranges_from_stmt (gimple *, bool); |
8bd73801 | 38 | |
c561e1e7 | 39 | /* Main interface to retrieve range information. */ |
448df21a | 40 | const value_range *get_value_range (const_tree op) |
c561e1e7 | 41 | { return vr_values->get_value_range (op); } |
42 | ||
4b69806c | 43 | /* Record a new unwindable range. */ |
44 | void push_value_range (tree var, value_range *vr); | |
45 | ||
c561e1e7 | 46 | /* Dump all the current value ranges. This is primarily |
47 | a debugging interface. */ | |
48 | void dump_all_value_ranges (FILE *fp) | |
49 | { vr_values->dump_all_value_ranges (fp); } | |
50 | ||
51 | /* A bit of a wart. This should ideally go away. */ | |
52 | void vrp_visit_cond_stmt (gcond *cond, edge *e) | |
53 | { return vr_values->vrp_visit_cond_stmt (cond, e); } | |
54 | ||
55 | /* Get the underlying vr_values class instance. If TRANSFER is | |
56 | true, then we are transferring ownership. Else we keep ownership. | |
57 | ||
58 | This should be converted to a unique_ptr. */ | |
5e3bbe77 | 59 | class vr_values *get_vr_values (void) { return vr_values; } |
8bd73801 | 60 | |
61 | private: | |
62 | DISABLE_COPY_AND_ASSIGN (evrp_range_analyzer); | |
c561e1e7 | 63 | class vr_values *vr_values; |
64 | ||
d6f839ac | 65 | void pop_value_range (); |
8bd73801 | 66 | value_range *try_find_new_range (tree, tree op, tree_code code, tree limit); |
67 | void record_ranges_from_incoming_edge (basic_block); | |
68 | void record_ranges_from_phis (basic_block); | |
dd435793 | 69 | void set_ssa_range_info (tree, value_range *); |
8bd73801 | 70 | |
71 | /* STACK holds the old VR. */ | |
d6f839ac | 72 | auto_vec<std::pair <tree, value_range *> > stack; |
447602ef | 73 | |
74 | /* True if we are updating global ranges, false otherwise. */ | |
75 | bool m_update_global_ranges; | |
8bd73801 | 76 | }; |
77 | ||
78 | #endif /* GCC_GIMPLE_SSA_EVRP_ANALYZE_H */ |