14.21.5 RTL SSA Register and Memory Accesses

In the RTL SSA form, most reads or writes of a resource are represented as a rtl_ssa::access_info6. These rtl_ssa::access_infos are organized into the following class hierarchy:

  +-- 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_infos 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.