RTL SSA Accesses (GNU Compiler Collection (GCC) Internals)

#### 15.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_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).

#### Footnotes

##### (6)

The exceptions are call clobbers, which are generally represented separately. See the comment above `rtl_ssa::insn_info` for details.