Next: Memory model, Previous: SSA, Up: Tree SSA [Contents][Index]
Alias analysis in GIMPLE SSA form consists of two pieces. First the virtual SSA web ties conflicting memory accesses and provides a SSA use-def chain and SSA immediate-use chains for walking possibly dependent memory accesses. Second an alias-oracle can be queried to disambiguate explicit and implicit memory references.
All statements that may use memory have exactly one accompanied use of a virtual SSA name that represents the state of memory at the given point in the IL.
All statements that may define memory have exactly one accompanied definition of a virtual SSA name using the previous state of memory and defining the new state of memory after the given point in the IL.
int i;
int foo (void)
{
# .MEM_3 = VDEF <.MEM_2(D)>
i = 1;
# VUSE <.MEM_3>
return i;
}
The virtual SSA names in this case are .MEM_2(D) and
.MEM_3. The store to the global variable i
defines .MEM_3 invalidating .MEM_2(D). The
load from i uses that new state .MEM_3.
The virtual SSA web serves as constraints to SSA optimizers preventing illegitimate code-motion and optimization. It also provides a way to walk related memory statements.
Points-to analysis builds a set of constraints from the GIMPLE SSA IL representing all pointer operations and facts we do or do not know about pointers. Solving this set of constraints yields a conservatively correct solution for each pointer variable in the program (though we are only interested in SSA name pointers) as to what it may possibly point to.
This points-to solution for a given SSA name pointer is stored
in the pt_solution sub-structure of the
SSA_NAME_PTR_INFO record. The following accessor
functions are available:
pt_solution_includes
pt_solutions_intersect
Points-to analysis also computes the solution for two special
set of pointers, ESCAPED and CALLUSED. Those
represent all memory that has escaped the scope of analysis
or that is used by pure or nested const calls.
Type-based alias analysis is frontend dependent though generic
support is provided by the middle-end in alias.c. TBAA
code is used by both tree optimizers and RTL optimizers.
Every language that wishes to perform language-specific alias analysis
should define a function that computes, given a tree
node, an alias set for the node. Nodes in different alias sets are not
allowed to alias. For an example, see the C front-end function
c_get_alias_set.
The tree alias-oracle provides means to disambiguate two memory references and memory references against statements. The following queries are available:
refs_may_alias_p
ref_maybe_used_by_stmt_p
stmt_may_clobber_ref_p
In addition to those two kind of statement walkers are available
walking statements related to a reference ref.
walk_non_aliased_vuses walks over dominating memory defining
statements and calls back if the statement does not clobber ref
providing the non-aliased VUSE. The walk stops at
the first clobbering statement or if asked to.
walk_aliased_vdefs walks over dominating memory defining
statements and calls back on each statement clobbering ref
providing its aliasing VDEF. The walk stops if asked to.
Next: Memory model, Previous: SSA, Up: Tree SSA [Contents][Index]