정의 도달
Reaching definition컴파일러 이론에서, 주어진 명령에 대한 도달 정의는 그 목표 변수가 개입적 할당 없이 주어진 명령에 도달할 수 있는 이전의 명령이다.예를 들어, 다음과 같은 코드입니다.
d1 : y : = 3 d2 : x : = y
d1에 대한 정의입니다.d2단, 다음 예에서는 다음과 같습니다.
d1 : y : = 3 d2 : y : =4 d3 : x : = y
d1더 이상 에 대한 정의가 아니다.d3,왜냐면d2도달 가능 범위: 정의되어 있는 가치d1사용할 수 없게 되어, 에 도달할 수 없습니다.d3.
분석으로서
마찬가지로 명명된 도달 정의는 데이터 흐름 분석으로, 코드의 특정 지점에 도달할 수 있는 정의를 정적으로 결정합니다.단순하기 때문에 교과서에서 데이터 흐름 분석의 표준 예로 자주 사용됩니다.사용되는 데이터 흐름 합류 연산자는 set union이며 분석은 forward flow입니다.도달 정의는 use-def 체인을 계산하는 데 사용됩니다.
정의에 도달할 때 특정 기본 S S에 사용되는 데이터 흐름 방정식은 다음과 같습니다.
즉, S S에 도달 정의 집합은 S S의 이전 인 [ S](\pred [ e d[ ](\ [ ])의 모든 도달 정의 입니다.제어 흐름 그래프S S에서 나온 도달 가능한 정의는 모두 이전 정의의 도달에 도달한정의에서 S(\ S)에 의해 변수가 살해된정의와 S(\ S에서 생성된 새로운 정의를 뺀 것입니다.
일반적인 명령에서는 를 다음과 같이 정의합니다.
- E [ : y ( x , , n) ] { { } [ : \ f ( _ { , \ , x { n } ] = { \ }, 기본 블록에서 로컬로 사용 가능한 정의 세트입니다.
- L[ : y ( 1 , , ) ] S [ - { { { KILL } - { } { : y \ ( _ { , \ , x _ { n } }{ { defaults ;
서 D F [ [ ]는 에 할당되는 모든 정의의 집합입니다.서 d d는 할당 명령에 부가되는 고유 라벨입니다.따라서 정의에 도달하는 값의 영역은 이러한 명령 라벨입니다.
검사 목록 알고리즘
정의에 도달하는 것은 일반적으로 반복 작업 목록 알고리즘을 사용하여 계산됩니다.
입력: 제어 흐름 그래프 CFG = (노드, 에지, 진입, 종료)
// 초기화 위해서 모든. CFG 노드 n 에 N, 나가.[n] = 빈집합; // OUT[n] = GEN[n]으로 최적화할 수 있습니다. // 모든 노드를 변경된 세트에 배치 // N은 그래프 내의 모든 노드입니다. 변경되었다. = N; // 반복 하는 동안에 (변경되었다. != 빈집합) { 선택하세요. a 노드 n 에 변경되었다.; // 변경된 세트에서 제거 변경되었다. = 변경되었다. -{ n }; // IN [ n ]을(를) 비워 둡니다. 입력[n] = 빈집합; // 이전 버전의 OUT[p]에서 IN[n]을(를) 계산합니다. 위해서 모든. 노드 p 에 전임자(n) 입력[n] = 입력[n] 유니언 나가.[p]; 구식 = 나가.[n]; // 이전 OUT 저장[n] // 전송 함수 f_n()을 사용하여 OUT[n] 업데이트 나가.[n] = 제너레이션[n] 유니언 (입력[n] -죽여라[n]); // 이전 값과 비교하여 OUT[n]에 변화가 있습니까? 한다면 (나가.[n] 변경되었다.) // oldout과 비교출력[n] { // 예인 경우 n의 모든 후계자를 변경된 세트에 넣습니다. 위해서 모든. 노드 s 에 후계자(n) 변경되었다. = 변경되었다. U { s }; } } 추가 정보
- Aho, Alfred V.; Sethi, Ravi & Ullman, Jeffrey D. (1986). Compilers: Principles, Techniques, and Tools. Addison Wesley. ISBN 0-201-10088-6.
- Appel, Andrew W. (1999). Modern Compiler Implementation in ML. Cambridge University Press. ISBN 0-521-58274-1.
- Cooper, Keith D. & Torczon, Linda. (2005). Engineering a Compiler. Morgan Kaufmann. ISBN 1-55860-698-X.
- Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation. Morgan Kaufmann. ISBN 1-55860-320-4.
- Nielson F., H.R. Nielson; , C. Hankin (2005). Principles of Program Analysis. Springer. ISBN 3-540-65410-0.