Trisha Shetty (Editor)

Reaching definition

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit

In compiler theory, a reaching definition for a given instruction is an earlier instruction whose target variable can reach (be assigned to) the given one without an intervening assignment. For example, in the following code:

d1 : y := 3 d2 : x := y

d1 is a reaching definition for d2. In the following, example, however:

d1 : y := 3 d2 : y := 4 d3 : x := y

d1 is no longer a reaching definition for d3, because d2 kills its reach: the value defined in d1 is no longer available and cannot reach d3.

As analysis

The similarly named reaching definitions is a data-flow analysis which statically determines which definitions may reach a given point in the code. Because of its simplicity, it is often used as the canonical example of a data-flow analysis in textbooks. The data-flow confluence operator used is set union, and the analysis is forward flow. Reaching definitions are used to compute use-def chains and def-use chains.

The data-flow equations used for a given basic block S in reaching definitions are:

  • R E A C H i n [ S ] = p p r e d [ S ] R E A C H o u t [ p ]
  • R E A C H o u t [ S ] = G E N [ S ] ( R E A C H i n [ S ] K I L L [ S ] )
  • In other words, the set of reaching definitions going into S are all of the reaching definitions from S 's predecessors, p r e d [ S ] . p r e d [ S ] consists of all of the basic blocks that come before S in the control flow graph. The reaching definitions coming out of S are all reaching definitions of its predecessors minus those reaching definitions whose variable is killed by S plus any new definitions generated within S .

    For a generic instruction, we define the G E N and K I L L sets as follows:

  • G E N [ d : y f ( x 1 , , x n ) ] = { d }
  • K I L L [ d : y f ( x 1 , , x n ) ] = D E F S [ y ] { d }
  • where D E F S [ y ] is the set of all definitions that assign to the variable y . Here d is a unique label attached to the assigning instruction; thus, the domain of values in reaching definitions are these instruction labels.

    References

    Reaching definition Wikipedia