Teichmüller space: Difference between revisions
en>Khazar2 m →Compactifications of Teichmüller spaces: clean-up, MOS:HYPHEN, replaced: widely- → widely using AWB |
|||
Line 1: | Line 1: | ||
In [[compiler theory]], a '''reaching definition''' for a given instruction is another instruction, the target variable of which may reach the given instruction without an intervening assignment. For example, in the following code: | |||
d1 : y := 3 | |||
d2 : x := y | |||
<code>d1</code> is a reaching definition at <code>d2</code>. In the following, example, however: | |||
d1 : y := 3 | |||
d2 : y := 4 | |||
d3 : x := y | |||
<code>d1</code> is no longer a reaching definition at <code>d3</code>, because <code>d2</code> kills its 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 chain]]s and [[def-use chain]]s. | |||
The data-flow equations used for a given basic block <math>S</math> in reaching definitions are: | |||
* <math>{\rm REACH}_{\rm in}[S] = \bigcup_{p \in pred[S]} {\rm REACH}_{\rm out}[p]</math> | |||
* <math>{\rm REACH}_{\rm out}[S] = {\rm GEN}[S] \cup ({\rm REACH}_{\rm in}[S] - {\rm KILL}[S])</math> | |||
In other words, the set of reaching definitions going into <math>S</math> are all of the reaching definitions from <math>S</math>'s predecessors, <math>pred[S]</math>. <math>pred[S]</math> consists of all of the basic blocks that come before <math>S</math> in the [[control flow graph]]. The reaching definitions coming out of <math>S</math> are all reaching definitions of its predecessors minus those reaching definitions whose variable is killed by <math>S</math> plus any new definitions generated within <math>S</math>. | |||
For a generic instruction, we define the <math>{\rm GEN}</math> and <math>{\rm KILL}</math> sets as follows: | |||
* <math>{\rm GEN}[d : y \leftarrow f(x_1,\cdots,x_n)] = \{d\}</math> | |||
* <math>{\rm KILL}[d : y \leftarrow f(x_1,\cdots,x_n)] = {\rm DEFS}[y] - \{d\}</math> | |||
where <math>{\rm DEFS}[y]</math> is the set of all definitions that assign to the variable <math>y</math>. Here <math>d</math> is a unique label attached to the assigning instruction; thus, the domain of values in reaching definitions are these instruction labels. | |||
== Further reading == | |||
*{{cite book | |||
|author=Aho, Alfred V.; Sethi, Ravi; & Ullman, Jeffrey D. | |||
|title=[[Compilers: Principles, Techniques, and Tools]] | |||
|publisher=Addison Wesley | |||
|year=1986 | |||
|isbn=0-201-10088-6}} | |||
*{{cite book | |||
|author=Appel, Andrew W. | |||
|title=Modern Compiler Implementation in ML | |||
|publisher=Cambridge University Press | |||
|year=1999 | |||
|isbn=0-521-58274-1}} | |||
*{{cite book | |||
|author=Cooper, Keith D.; & Torczon, Linda. | |||
|title=Engineering a Compiler | |||
|publisher=Morgan Kaufmann | |||
|year=2005 | |||
|isbn=1-55860-698-X}} | |||
*{{cite book | |||
|author=Muchnick, Steven S. | |||
|title=Advanced Compiler Design and Implementation | |||
|publisher=Morgan Kaufmann | |||
|year=1997 | |||
|isbn=1-55860-320-4}} | |||
== See also == | |||
*[[Static single assignment form]] | |||
[[Category:Program analysis]] | |||
[[Category:Data-flow analysis]] |
Revision as of 03:17, 4 November 2013
In compiler theory, a reaching definition for a given instruction is another instruction, the target variable of which may reach the given instruction without an intervening assignment. For example, in the following code:
d1 : y := 3 d2 : x := y
d1
is a reaching definition at d2
. In the following, example, however:
d1 : y := 3 d2 : y := 4 d3 : x := y
d1
is no longer a reaching definition at d3
, because d2
kills its 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 and def-use chains.
The data-flow equations used for a given basic block in reaching definitions are:
In other words, the set of reaching definitions going into are all of the reaching definitions from 's predecessors, . consists of all of the basic blocks that come before in the control flow graph. The reaching definitions coming out of are all reaching definitions of its predecessors minus those reaching definitions whose variable is killed by plus any new definitions generated within .
For a generic instruction, we define the and sets as follows:
where is the set of all definitions that assign to the variable . Here is a unique label attached to the assigning instruction; thus, the domain of values in reaching definitions are these instruction labels.
Further reading
- 20 year-old Real Estate Agent Rusty from Saint-Paul, has hobbies and interests which includes monopoly, property developers in singapore and poker. Will soon undertake a contiki trip that may include going to the Lower Valley of the Omo.
My blog: http://www.primaboinca.com/view_profile.php?userid=5889534 - 20 year-old Real Estate Agent Rusty from Saint-Paul, has hobbies and interests which includes monopoly, property developers in singapore and poker. Will soon undertake a contiki trip that may include going to the Lower Valley of the Omo.
My blog: http://www.primaboinca.com/view_profile.php?userid=5889534 - 20 year-old Real Estate Agent Rusty from Saint-Paul, has hobbies and interests which includes monopoly, property developers in singapore and poker. Will soon undertake a contiki trip that may include going to the Lower Valley of the Omo.
My blog: http://www.primaboinca.com/view_profile.php?userid=5889534 - 20 year-old Real Estate Agent Rusty from Saint-Paul, has hobbies and interests which includes monopoly, property developers in singapore and poker. Will soon undertake a contiki trip that may include going to the Lower Valley of the Omo.
My blog: http://www.primaboinca.com/view_profile.php?userid=5889534