In the RTL SSA form, most reads or writes of a resource are
represented as a rtl_ssa::access_info
6.
These rtl_ssa::access_info
s are organized into the following
class hierarchy:
rtl_ssa::access_info | +-- rtl_ssa::use_info | +-- rtl_ssa::def_info | +-- rtl_ssa::clobber_info | +-- rtl_ssa::set_info | +-- rtl_ssa::phi_info
A rtl_ssa::use_info
represents a read or use of a resource and
a rtl_ssa::def_info
represents a write or definition of a resource.
As in the main RTL representation, there are two basic types of
definition: clobbers and sets. The difference is that a clobber
leaves the register with an unspecified value that cannot be used
or relied on by later instructions, while a set leaves the register
with a known value that later instructions could use if they wanted to.
A rtl_ssa::clobber_info
represents a clobber and
a rtl_ssa::set_info
represent a set.
Each rtl_ssa::use_info
records which single rtl_ssa::set_info
provides the value of the resource; this is null if the resource is
completely undefined at the point of use. Each rtl_ssa::set_info
in turn records all the rtl_ssa::use_info
s that use its value.
If a value of a resource can come from multiple sources,
a rtl_ssa::phi_info
brings those multiple sources together
into a single definition (see RTL SSA Phi Nodes).
The exceptions
are call clobbers, which are generally represented separately.
See the comment above rtl_ssa::insn_info
for details.