GCC Middle and Back End API Reference
state-transition.h
Go to the documentation of this file.
1/* Classes for tracking pertinent events that happen along
2 an execution path.
3 Copyright (C) 2026 Free Software Foundation, Inc.
4 Contributed by David Malcolm <dmalcolm@redhat.com>.
5
6This file is part of GCC.
7
8GCC is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 3, or (at your option)
11any later version.
12
13GCC is distributed in the hope that it will be useful, but
14WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
21
22#ifndef GCC_ANALYZER_STATE_TRANSITION_H
23#define GCC_ANALYZER_STATE_TRANSITION_H
24
27
28namespace ana {
29
31{
32public:
41
43 : m_prev_state_transition (nullptr)
44 {
45 }
46
47 virtual ~state_transition () {}
48
49 virtual std::unique_ptr<state_transition>
50 clone () const = 0;
51
52 virtual void
53 dump_to_pp (pretty_printer *pp) const = 0;
54
55 virtual enum kind get_kind () const = 0;
56
57 virtual const state_transition_at_call *
58 dyn_cast_state_transition_at_call () const { return nullptr; }
59
60 virtual const state_transition_at_return *
61 dyn_cast_state_transition_at_return () const { return nullptr; }
62
63 void dump () const;
64
65 static std::unique_ptr<state_transition>
66 make (const region *src_reg,
67 tree src_reg_expr,
68 const region *dst_reg,
69 tree dst_reg_expr);
70
73
76};
77
79{
80public:
82 : m_dst_reg_expr (dst_reg_expr)
83 {
84 }
85
86 std::unique_ptr<state_transition>
87 clone () const final override;
88
89 void
90 dump_to_pp (pretty_printer *pp) const final override;
91
92 enum kind
93 get_kind () const final override { return kind::origin; }
94
96};
97
99{
100public:
105
106 std::unique_ptr<state_transition>
107 clone () const final override;
108
109 void
110 dump_to_pp (pretty_printer *pp) const final override;
111
112 enum kind
113 get_kind () const final override { return kind::at_call; }
114
116 dyn_cast_state_transition_at_call () const final override { return this; }
117
119 get_callsite_expr () const { return m_expr; }
120
121private:
123};
124
126{
127public:
128 std::unique_ptr<state_transition>
129 clone () const final override;
130
131 void
132 dump_to_pp (pretty_printer *pp) const final override;
133
134 enum kind
135 get_kind () const final override { return kind::at_return; }
136
138 dyn_cast_state_transition_at_return () const final override { return this; }
139};
140
142{
143public:
145 tree dst_reg_expr)
146 : m_src_reg_expr (src_reg_expr),
147 m_dst_reg_expr (dst_reg_expr)
148 {
151
154 }
155
156 std::unique_ptr<state_transition>
157 clone () const final override;
158
159 void
160 dump_to_pp (pretty_printer *pp) const final override;
161
162 enum kind
163 get_kind () const final override { return kind::copy; }
164
167};
168
170{
171public:
173 : m_src_reg_expr (src_reg_expr)
174 {
175 }
176
177 std::unique_ptr<state_transition>
178 clone () const final override;
179
180 void
181 dump_to_pp (pretty_printer *pp) const final override;
182
183 enum kind
184 get_kind () const final override { return kind::use; }
185
187};
188
189} // namespace ana
190
191#endif /* GCC_ANALYZER_STATE_TRANSITION_H */
Definition callsite-expr.h:32
Definition region.h:127
Definition state-transition.h:99
callsite_expr m_expr
Definition state-transition.h:122
void dump_to_pp(pretty_printer *pp) const final override
enum kind get_kind() const final override
Definition state-transition.h:113
const state_transition_at_call * dyn_cast_state_transition_at_call() const final override
Definition state-transition.h:116
state_transition_at_call(callsite_expr expr)
Definition state-transition.h:101
callsite_expr get_callsite_expr() const
Definition state-transition.h:119
std::unique_ptr< state_transition > clone() const final override
Definition state-transition.h:126
enum kind get_kind() const final override
Definition state-transition.h:135
void dump_to_pp(pretty_printer *pp) const final override
std::unique_ptr< state_transition > clone() const final override
const state_transition_at_return * dyn_cast_state_transition_at_return() const final override
Definition state-transition.h:138
enum kind get_kind() const final override
Definition state-transition.h:163
tree m_src_reg_expr
Definition state-transition.h:165
void dump_to_pp(pretty_printer *pp) const final override
std::unique_ptr< state_transition > clone() const final override
state_transition_copy(tree src_reg_expr, tree dst_reg_expr)
Definition state-transition.h:144
tree m_dst_reg_expr
Definition state-transition.h:166
tree m_dst_reg_expr
Definition state-transition.h:95
void dump_to_pp(pretty_printer *pp) const final override
state_transition_origin(tree dst_reg_expr)
Definition state-transition.h:81
std::unique_ptr< state_transition > clone() const final override
enum kind get_kind() const final override
Definition state-transition.h:93
std::unique_ptr< state_transition > clone() const final override
void dump_to_pp(pretty_printer *pp) const final override
enum kind get_kind() const final override
Definition state-transition.h:184
tree m_src_reg_expr
Definition state-transition.h:186
state_transition_use(tree src_reg_expr)
Definition state-transition.h:172
virtual const state_transition_at_return * dyn_cast_state_transition_at_return() const
Definition state-transition.h:61
state_transition * m_prev_state_transition
Definition state-transition.h:74
static std::unique_ptr< state_transition > make(const region *src_reg, tree src_reg_expr, const region *dst_reg, tree dst_reg_expr)
virtual ~state_transition()
Definition state-transition.h:47
diagnostics::paths::event_id_t m_event_id
Definition state-transition.h:75
virtual std::unique_ptr< state_transition > clone() const =0
diagnostics::paths::event_id_t get_src_event_id() const
virtual const state_transition_at_call * dyn_cast_state_transition_at_call() const
Definition state-transition.h:58
state_transition()
Definition state-transition.h:42
virtual enum kind get_kind() const =0
kind
Definition state-transition.h:34
@ copy
Definition state-transition.h:38
@ use
Definition state-transition.h:39
@ at_call
Definition state-transition.h:36
@ at_return
Definition state-transition.h:37
@ origin
Definition state-transition.h:35
virtual void dump_to_pp(pretty_printer *pp) const =0
Definition genmatch.cc:1506
Definition pretty-print.h:241
union tree_node * tree
Definition coretypes.h:97
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2009
Definition access-diagram.h:30
bool printable_expr_p(const_tree expr)
diagnostic_event_id_t event_id_t
Definition event-id.h:66
Definition loop-invariant.cc:78
#define gcc_assert(EXPR)
Definition system.h:817