Contents
Reaching definition
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 is a reaching definition for. In the following, example, however: d1 : y := 3 d2 : y := 4 d3 : x := y is no longer a reaching definition for, because kills its reach: the value defined in is no longer available and cannot reach.
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. The data-flow equations used for a given basic block S in reaching definitions are: In other words, the set of reaching definitions going into S are all of the reaching definitions from S's predecessors, pred[S]. pred[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 {\rm GEN} and {\rm KILL} sets as follows: where 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.
Worklist algorithm
Reaching definition is usually calculated using an iterative worklist algorithm. Input: control-flow graph CFG = (Nodes, Edges, Entry, Exit)
This article is derived from Wikipedia and licensed under CC BY-SA 4.0. View the original article.
Wikipedia® is a registered trademark of the
Wikimedia Foundation, Inc.
Bliptext is not
affiliated with or endorsed by Wikipedia or the
Wikimedia Foundation.