在編譯器理論中,一個指令的定義可達性(Reaching Definition)必然是另外一個指令,而這個指令則是一個沒有交錯賦值指令的目標變數,舉例來說:
基本介紹
- 中文名:定義可達性
- 外文名:Reaching Definition
例子
d1 : y := 3d2 : x := y
d1 : y := 3d2 : y := 4d3 : x := y
作為分析用途


















工作清單算法
// Initializefor all CFG nodes n in N, OUT[n] = emptyset; // can optimize by OUT[n] = GEN[n];// put all nodes into the changed set// N is all nodes in graph, Changed = N; //Iterate while (Changed != emptyset){ choose a node n in Changed; // remove it from the changed set Changed = Changed -{ n }; // init IN[n] to be empty IN[n] = emptyset; // calculate IN[n] from predecessors' OUT[p] for all nodes p in predecessors(n) IN[n] = IN[n] Union OUT[p]; oldout = OUT[n]; // save old OUT[n] // update OUT[n] using transfer function f_n () OUT[n] = GEN[n] Union (IN[n] -KILL[n]); // any change to OUT[n] compared to previous value? if (OUT[n] changed) // compare oldout vs. OUT[n] { // if yes, put all successors of n into the changed set for all nodes s in successors(n) Changed = Changed U { s }; }}