KR100226233B1 - 컴파일러 - Google Patents

컴파일러 Download PDF

Info

Publication number
KR100226233B1
KR100226233B1 KR1019950029734A KR19950029734A KR100226233B1 KR 100226233 B1 KR100226233 B1 KR 100226233B1 KR 1019950029734 A KR1019950029734 A KR 1019950029734A KR 19950029734 A KR19950029734 A KR 19950029734A KR 100226233 B1 KR100226233 B1 KR 100226233B1
Authority
KR
South Korea
Prior art keywords
survival
variable
block
definition
command
Prior art date
Application number
KR1019950029734A
Other languages
English (en)
Other versions
KR960011768A (ko
Inventor
타나카아키라
사야마쥰코
유카와히로시
Original Assignee
모리시타 요이찌
마츠시타 덴키 산교 가부시키가이샤
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 모리시타 요이찌, 마츠시타 덴키 산교 가부시키가이샤 filed Critical 모리시타 요이찌
Publication of KR960011768A publication Critical patent/KR960011768A/ko
Application granted granted Critical
Publication of KR100226233B1 publication Critical patent/KR100226233B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 변수의 생존구간의 중복검사를 고속으로 검사가능하게 하므로써, 컴파일속도를 향상시키는 것을 목적으로 하며, 그 구성에 있어서, 기본블록내에 단순블록을 형성하고, 단순블록내생존변수집합유지부(12)는 1개의 단순블록내에만 생존구간이 존재하는 변수를 유지한다. 기본블록내에만 생존구간이 존재하는 변수를 유지한다. 기본블록내생존변수집합유지부(13)는, 복수의 단순블록에 생존구간이 존재하나, 1 개의 기본블록내에만 생존구간이 존재하는 변수를 유지한다. 기본블록간생존변수집합유지부(14)는, 복수의 기본블록간에 생존구간이 존재하는 변수를 유지한다. 생존구간생성부(15)는, 변수의 생존구간을 검출해서, 그 결과를, 생존구간유지부(11)에 격납하고, 또한 생존구간의 검출시에 생존구간의 범위에 의해서 변수를, 단순블록내생존변수집합유지부(12)나, 기본블록내생존변수집합유지부(13)나, 기본블록간생존변수집합유지부(14)의 어느 하나에 변수를 격납한다. 생존구간중복검사부(16)는, 생존구간의 범위에 의해서 생존구간의 중복검사를 필요한 할당대상간에 대해서만 행한다.

Description

컴파일러
제1도는 본 발명에 관한 컴파일러의 구성을 표시한 도면
제2도는 최적화장치(2)의 구성을 표시한 도면
제3도는 단순블록생성처리의 순서도
제4도는 단순블록생성의 과정을 표시한 도면
제5도는 자원할당장치(3)의 구성을 표시한 도면
제6도는 생존구간중복판정부(9)의 구성을 표시한 도면
제7도는 생존구간생성처리의 순서도
제8도는 정의마다 생존구간검출처리의 순서도
제9도는 후속블록검색처리의 순서도
제10도는 후속블록생존구간검출처리의 순서도
제11도는 생존구간증복검사처리의 순서도
제12도는 생존구간중복검사처리의 처리과정을 표시한 도면
제13도는 기본블록을 설명하기 위한 설명도
제14도는 소스프로그램의 일예
제15도는 중간언어프로그램의 일예
제16도는 기본블록화된 중간언어프로그램의 일예
제17도는 데이터플로정보, 정의-참조정보, 참조-정의정보의 일예
제18도는 중간언어프로그램중의 각 변수의 생존구간을 도시한 도면
제19도는 단순블록생성의 과정을 표시한 도면
제20도는 단순블록생성후의 각 변수의 생존구간을 도시한 도면
제21도는 생존구간유지부(11), 단순블록내생존변수집합유지부(12), 기본블록생존변수유지부(13), 기본블럭간 생존변수집합유지부(14)의 유지내용의 일예를 도시한 도면
제22도는 생존구간중복검사의 검사결과를 표시한 도면
제23도는 생존구간 및 생존구간의 중복검사의 검사결과를 표시한 도면
도면의 주요부분에 대한 부호의 설명
(1) : 구문해석장치 (2) : 최적화장치
(3) : 자원할당장치 (4) : 코우드생성장치
(5) : 제어플로해석부 (6) : 데이터플로해석부
(7) : 최적화처리부 (8) : 단수블록생성부
(9) : 생존구간중복검출부 (10) : 변수자원할당부
(11) : 생존구간유지부 (12) : 단분블록내생존변수집합유지부
(13) : 기본블록내생존변수집합유지부 (14) : 기본블록간생존변수집합유지부
(15) : 생존구간생성부 (16) : 생존구간중복검사부
본 발명은 고급프로그래밍언어로 쓰여진 소스프로그램을 기계어프로그램으로 컴파일하는 컴파일러에 관한 것이다.
최근, C언어등의 고급프로그래밍언어프로그램을 기술하여 프로그램의 개발효율을 높이는 것이 활발히 행해지고 있다.
고급프로그래밍언어를 사용하면, 프로그래머는, 프로그램중의 수치의 유지, 연산 전송 등의 처리를, 변수를 피연산자로 한 연산(스텝)으로 표현할 수 있다. 이 변수는 프로그래머에 의해서 임의로 정의되고, 또 필요한 개수만 사용되기 때문에, 프로그래머는 자유롭게 프로그램을 기술할 수 있다. 또 기술된 프로그램(소스프로그램이라고 칭함)은 컴파일됨으로써, 컴퓨터가 이해가능한 기계어프로그램이 된다. 당해 기계어프로그램중의 연산은, 기계어명령에 의해서 표현되고, 또 당해기계어명령은, 레지스터 혹은 메모리 피연산자로 하므로, 상기 변수에는, 레지스터 혹은 메모리를 할당할 필요가 있다. 이 할당처리는 자원할당처리라고 불린다. 이 자원할당처리가 최적이면, 상기 기계어명령의 코우드사이즈는 최소, 실행시간은 최단이 된다.
한편, 레지스터와 메모리를 비교하면, 레지스터를 피연산자로 하는 편이 기계어명령의 소사이즈화, 실행시간의 최단화가 도모된다.
단, 레지스터는 사용할 수 있는 개수가 소수이기 때문에, 상기 자원할당을 행하기전에 동일레지스터를 할당할 수 있는 변수는 어느것과 어느것인지를 생존구간에 의거해서 검사하고, 당해 검사의 감사결과에 의해서, 자원할당을 행하는 것이 일반적이다. 생존구간이란, 각각의 변수에 격납되어 있는 값이 유효하게 되는 구간을 말하고, 프로그램과, 당해 프로그램에 있어서 사용되고 있는 변수의 생존구간을 제 23 도 (a)에 표시한다.
본 도면에 있어서, 변수 x4,와 변수 t3은, 생존구간이 겹치고 있으므로, 동일레지스터를 할당할 수 없다는 것을 알 수 있다. 변수 t1과, 변수 t3은, 이 생존구간이 겹치고 있지않으므로, 동일레지스터를 할당할 수 있다는 것을 알수 있다.
다음에, 프로그램중의 각 변수의 생존구간을, 중간언어스텝의 집합으로 표현한다. 중간언어스텝은, 제 23 도 (a)의 일예에서는 s1, s2, s3, s4, s5…로 표시된다. 또 중간언어스텝집합에서의 생존구간의 표현을 제 23 도 (b)의 일예에 표시한다. 제 23 도 (b)의 일예에서는, 변수 t1의 생존구간은, 중간언어스텝 s2 뿐이고, 변수 x의 생존구간은, 중간언어스텝s8,s9,s10,s11인 것이 표시된다.
다음에, 프로그램중의 임의의 2 변수에 대해서, 중간언어스텝집합의 집합곱을 취한다. 이 집합곱이 공(空)이면, 그 2 변수의 생존구간은 겹치지 않는다고 판정할 수 있고, 공이 아니면 겹친다고 판정할 수 있다. 제 23 도 (b)의 일예에서는, 변수 x와 변수 x4 는, 생존구간의 집합에 공통요소가 없기 때문에 상기 집합곱이 공이 되고, 비중복이 판정된다. 또 변수 x4와 변수 t3은, 생존구간의 집합에 공통요소 s4가 존재하기 때문에, 상기 집합곱의 결과가 공이 아니게 된다. 그 때문에, 변수 x4와 변 t3은 생존구간의 중복이 판정된다.
이와 같이, 집합곱의 산출을 반복하여, 각 변수의 생존구간의 중복, 비중복을, 제 23 도 (c)에 표시한 바와 같이 판정한다. 본 도면에 있어서, 변수 t1 은 변수 p1, p2, p3과 생존구간이 겹치는 것이 표시된다. 또, 변수 x4도, 변수 p1, p2, p3과 생존구간이 겹치는 것이 표시된다. 이상에 설명한 중복조사를 행하면, 레지스터에 할당하는 변수의 수를 보다 많게 할 수 있다. 그러나 상기 종래기술에 의하면 생존구간의 중복검사에 요하는 처리시간이 다대한 것이 된다는 문제점이 있었다.
상기한 바와 같이, 변수는 프로그래머의 사정에 따라서 작성된다. 그 때문에, 복수인의 프로그래머에 의해서 작성되는 소프트웨어중의 변수의 총수는, 백개전후가 되는 것이 일반적이다. 이에 더하여, 중간언어프로그램의 생성시에는, 변수가, 컴파일러에 의해서 자동적으로 생성되므로, 결과로서 중복검사의 대상이 되는 변수의 총수는, 수백개단위가 된다.
변수의 생존구간의 중복검사는, 집합곱의 산출에 의해서 구해지나, 이 집합곱의 n개의 변수에 대한 계산횟수는 nC2=n(n-1)/2회이고, 개수 n이 수백개일 경우, 집합곱의 계산횟수가 매우 큰수가 된다. 예를 들면 변수의 개수 n이 100개라고 하면 nC2=4950이 되고, 컴파일러는 상기 집합곱의 계산을 4950회 행하게 된다. 개수 n이 300개라고 하면, nC2=44850이 되고, 컴파일러는 집합곱의 계산을 44850회 행하게 된다.
본 발명은, 상기 문제점에 비추어서, 생존구간의 중복검사에 요하는 처리시간을 크게 저감할 수 있는 컴파일러를 제공하는 것을 목적으로 한다.
상기 목적을 달성하기 위하여, 제 1 발명의 컴파일러는, 복수의 명령으로 이루어진 프로그램을, 기계어프로그램으로 번역하는 컴파일러에 있어서, 상기 프로그램중의 점프명령과, 당해 점프명령의 점프장소의 명령을 검출하는 점프검출수단과, 점프검출수단이 검출한 명령에 의거해서, 상기 프로그램을 기본블록으로 분할하는 분할수단과, 프로그램중의 각 변수에 대해서, 변수의 설정치가 유효하게 되는 프로그램중의 구간인 생존구간을 검출하고, 검출결과를, 생존구간내에 포함되는 명령의 위치를 표시하는 위치정보의 집합으로 표시하는 생존구간검출수단과, 생존구간검출수단이 검출한 생존구간이 1개의 기본블록내에 들어가는 변수를 전부검출하고, 검출결과를 당해 기본블록에 대응시킨 기본블록내 생존변수집합으로 표시하는 기본블록내 생존변수검출수단과, 생존구간검출수단이 검출한 생존구간이, 복수의 기본블록간에 미치는 변수를 전부 검출하고, 검출결과를, 기본블록간생존변수집합으로 표시하는 기본블록간생존변수검출수단과, 기본블록간 생존변수집합으로부터 변수를 2개씩 꺼내고, 당해 2변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는데 제 1 생존구간중폭판정수단과, 동일한 기본블록에 대응된 기본블록내생존변수집합으로부터 변수를 2개씩 꺼내고, 당해 2변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는데 제 2 생존구간중복판정수단과, 상기 기본블록에 대응된 기본블록내생존변수집합과, 기본블록간생존변수로부터 변수를 1개씩 꺼내고, 당해 2변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는데 제 3 생존구간중복판정수단과, 상기 제 1, 제 2, 제 3 생존구간중복판정수단의 판정결과를 사용해서 자원할당을 행하는 것을 특징으로 하고 있다.
제 2 발명의 컴파일러는 또 변수의 값을 설정하는 명령인 정의명령과, 당해 정의명령에 의해서 설정된 변수의 값을 사용하는 명령인 참조명령이, 적어도 1조순으로 배열되는 명령열인 단순블록을 기본블록내에 형성하는 단순블록형성수단과, 상기 기본블록내 생존변수집합으로부터 생존구간이 1 개의 단순블록내에 들어가는 변수를 전부 검출하고, 검출결과를, 당해 단순블록에 대응시킨 단순블록내생존변수집합으로 표시하는 단순블록내생존변수검출수단과, 상기 기본블록내생존변수집합으로부터 생존구간이 복수의 단순블록간에 미치는 변수를 검출하고, 검출결과를, 단순블록간 생존변수집합으로 표시하는 단순블록간생존변수검출수단을 구비하고, 상기 제 2 생존구간중복판정수단은, 상기 단순블록간 생존변수집합으로부터 변수를 2 개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 1 생존구간중복판정부와, 동일한 단순블록에 대응된 단순블록내 변수집합으로부터 변수를 2 개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 2 생존구간중복판정부와, 상기 단순블록에 대응된 단순블록내 변수집합과, 단순블록간 생존변수집합으로부터 변수를 1 개씩 꺼내고, 당해 2 변수의 생존구간이 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 3 생존구간중복판정부를 구비한 것을 특징으로 하고 있다.
제 3 발명의 컴파일러는, 상기 제 3 생존구간중복판정수단은, 기본블록간생존변수집합과, 상기 단순블록에 대응된 단순블록내생존변수집합으로부터 변수를 1개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 4 생존구간중복판정부와 기본블록간생존변수집합과, 단순블록간 생존변수집합으로부터 변수를 1개씩 꺼내고, 당해 2변수의 생존구간에 대응하는 명령위치집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 5 생존구간중복판정부를 구비한 것을 특징으로 하고 있다.
제 4 발명의 컴파일러는, 상기 단순블록형성수단으로서, 기본블록으로부터 정의명령을 1 개씩 꺼내는 정의명령꺼내기수단과, 정의명령꺼내기수단이 꺼낸 정의명령이 포함되는 기본블록으로부터, 그 정의명령에 대응하는 참조명령을 검출하는 대응참조명령검출수단과, 대응참조명령검출수단이 검출한 참조명령의 위치에 당해참조명령에 대응하는 정의명령이 이동가능한지 아닌지를 판정하는 정의명령이동가부판정수단과, 정의명령이동가부판정수단이 가능하다고 판정한 경우, 정의명령이동가부판정수단이 가능하다고 판정한 정의명령을, 당해 정의명령에 대응하는 참조명령의 직전에 이동하고, 당해 정의명령 및 참조명령을 1 개의 단순블록에 통합하는 정의명령이동수단과, 정의명령이동수단이 이동한 정의명령이 이동전에 있어서, 단순블록내의 최후의 명령인 경우, 이동전의 단순블록의 나머지 명령의 전부를 당해 정의명령의 이동장소의 직전에 이동하고, 이동한 나머지명령을, 이동장소의 단순블록에 통합하는 단순블록나머지명령이동수단을 구비한 것을 특징으로 하고 있다.
제 5 발명의 컴파일러는, 상기 정의명령이동가부판정수단으로서, 상기 정의명령꺼내기수단이 꺼낸 정의명령에 의해서 값이 설정되는 변수가 1 개인지 아닌지를 판정하는 변수단복판정부와, 상기 변수단복판정부가 1 개라고 판정한 경우, 상기 대응참조명령검출수단이 검출한 참조명령이 1 개인지 아닌지를 판정하는 참조명령단복판정부와, 상기 참조명령단복판정부가 1개라고 판정한 경우, 당해참조명령에 대응하는 정의명령에 의해서 값이 설정되는 변수가, 당해 정의명령으로부터 당해참조명령까지의 구간에 있어서 재설정되는지 아닌지를 판정하는 제 1 재설정유무판정부와, 상기 제 1 재설정유무판정부가 재설정이 없다고 판정한 경우, 당해 정의명령에 있어서 사용되는 변수를 검출하는 정의명령내 사용변수검출부와, 상기 정의명령내사용변수검출부가 검출한 변수가, 당해 정의명령으로부터 당해 참조명령까지의 사이에, 재설정되지 않는 것을 판정하는 제 2 재설정유무판정부와, 상기 제 2 재설정유무판정부가 재석정이 없다고 판정한 경우, 당해 정의명령이 당해참조명령의 위치에 이동가능하다고 판정하는 이동가부판정부로 이루어진 것을 특징으로 하고 있다.
제 6 발명의 컴파일러는 또, 상기 프로그램중의 각 기본블록과, 당해기본블록의 입구에 있어서 유효하게 되는 변수 및 출구에 있어서 유효하게 되는 변수를 대응시켜서 기억하는 유효변수정보기억수단을 구비하고, 상기 생존구간검출수단은, 상기 프로그램으로부터 정의명령을 1개씩 꺼내는 정의명령꺼내기부와, 상기 정의명령꺼내기부에 의해서 꺼내진 정의명령을 포함한 기본블록과, 당해 정의명령에 의해서 설정되는 변수를 검출하고, 검출한 변수의 설정치가 당해 기본블록의 출구에서 무효인지 아닌지를, 상기 유효변수정보기억수단의 기억내용에 의거해서 판정하는 출구무효판정부와, 상기 출구무효판정부가 설정치무효라고 판정한 경우, 당해 기본블록으로부터, 당해 정의명령에 대응하는 참조명령으로서, 당해 기본블록의 출구에 가장 가까운 것을 검출하는 출구최근참조명령검출부와, 당해정의명령의 다음 명령으로부터 출구최근참조명령검출부가 검출한 참조명령까지의 명령위치정보를 전부 검출하는 기본블록내명령위치검출부와, 명령위치정보가 검출된 변수에 대해서의 생존구간을, 기본블록내명령위치검출부가 검출한 명령위치정보의 집합으로 표시하는 기본블록내생존구간표현부를 구비하고, 상기 기본블록내생존변수검출수단은, 상기 기본블록내생존구간표현부가 생존구간을 표현하는 변수를, 당해 변수가 포함되는 기본블록에 대응하는 기본블록내생존변수집합의 멤버로 하는 것을 특징으로 하고 있다.
제 7 발명의 컴파일러는, 또 기본블록과, 당해 기본블록에 있어서 설정되는 변수를 대응시켜서 기억하는 기본블록내정의정보기억수단을 구비하고, 상기 생존구간검출수단은, 상기 출구무효판정부가 유효하다고 판정한 경우, 상기 기본블록내정의정보기억수단의 기억내용에 의거해서, 상기 출구무효판정부에 의해서 유효하다고 판정된 정의명령에 있어서 설정되는 변수가, 당해 정의명령으로부터 당해 정의명령을 포함한 기본블록의 출구까지의 사이에 재설정되는지 아닌지를 판정하는 재설정유무판정부가, 상기 재설정치유무판정부가 재설정없다고 판정한 경우, 당해 정의명령의 다음의 명령으로부터 당해 기본블록의 출구까지의 명령위치정보를 검출하는 출구유효시위치정보검출부와, 상기 재설정유무판정부가 재설정없다고 판정한 경우, 상기 유효변수정보기억수단 및 기본블록내정의정보기억수단의 기억내용에 의거해서, 당해 정의명령이 포함되는 기본블록의 다음순서의 기본블록중, 당해변수가 그 입구 및 출구에서 유효하고, 또한 그 내부에서 당해변수가 재설정되지 않는 것을 전부 검출하는 생존기본블록검출부와, 상기 기본블록내 정의정보기억수단의 기억내용에 의거해서, 상기 생존기본블록검출부가 검출한 기본블록내에 포함되는 명령위치정보를 전부 검출하는 기본블록간위치정보검출부와 상기 재설정유무판정부가 재설정없다고 판정한 경우, 당해 정의명령이 포함되는 기본블록의 다음순서의 기본블록중, 그 입구에서 당해변수의 값이 유효하고, 그 출구에서 무효한 기본블록을 검출하는 말미기본블록검출부와, 상기 말미기본블록검출부가 검출한 기본블록으로부터, 당해 정의명령에 대응하는 최후의 참조명령을 검출하는 말미참조명령검출부와, 상기 말미기본블록검출부가 검출한 기본블록의 입구로부터 상기 말미참조명령검출부가 검출한 참조명령까지의 명령위치정보를 전부검출하는 입구유효시위치정보검출부와, 상기 재설정유무판정부가 재설정없다고 판정한 변수에 대응하는 생존구간의 집합을, 출구유효시위치정보검출수단의 검출결과와, 입구유효시위치정보검출수단의 검출결과와, 기본블록간위치검출수단의 검출결과를 합한 집합으로 표시하는 기본블록간생존구간표현부를 구비하고, 상기 기본블록간생존변수검출수단은, 상기 재ㅓㄹ정유무판정부가 재설정없다고 판정한 변수를, 기본블록간생존변수집합의 멤버를 하는 것을 특징으로 하고 있다.
제 8 발명의 컴파일러는, 프로그램중의 각 명령위치와, 당해 명령위치에 명령에 있어서 사용되는 변수와, 당해 변수가 설정되는 명령의 명령위치정보를 대응시켜서 기억하는 참보-정의정보기억수단을 구비하고, 상기 생존구간검출수단은, 상기 정의명령꺼내기부가 꺼낸 정의명령의 위치에 식별정보를 붙이는 마킹부와, 상기 정의명령꺼내기부가 꺼낸 정의명령에 대응하는 참조명령에서 사용되는 변수를 검출하는 참조변수검출부와, 참조-정의정보기억수단의 기억내용에 의거해서, 상기 참조변수검출부가 검출한 변수에 설정치를 설정하는 정의명령을 전부 검출하는 정의명령검출부와, 상기 정의명령검출부가 검출한 정의명령중, 상기 마킹부에 의해서 붙여진 식별정보가 없는 것을 검출하는 무마크정의명령검출부와, 상기 무가크정의명령검출부가 검출한 정의명령의 다음의 명령으로부터, 그 정의명령을 포함한 기본블록의 출구까지의 명령위치정보를 전부검출하는 제 1 분기블록내위치정보검출부와, 상기 기본블록간생존구간표현부가 표시한 명령위치정보의 집합에, 상기 제 1 분기블록내위치정보검출부가 검출한 명령위치정보를 부가하는 제 1 명령위치정보부가부를 구비한 것을 특징으로 하고 있다.
제 9 발명의 컴파일러는 프로그램중의 각 명령위치와, 당해 명령위치의 명령에 있어서 설정되는 변수와, 당해변수가 사용되는 명령의 명령위치정보를 대응시켜서 기억하는 정의-참조정보기억수단을 구비하고, 상기 생존구간검출수단은 상기 정의-참조정보기억수단의 기억내용에 의거해서, 상기 무마크정의명령검출부가 검출한 정의명령에 대응하는 참조명령을 검출하는 분기블록내참조명령검출부와, 상기 분기블록내참조명령검출부가 검출한 참조명령을 포함한 기본블록을 검출하는 분기블록검출부와, 상기 분기블록검출부가 검출한 기본블록의 입구로부터, 상기 분기블록내참조명령검출부가 검출한 참조명령까지의 명령위치정보를 전부검출하는 제 2 분기블록내위치정보검출부와, 상기 기본블록간 생존구간표현부가 표시한 명령위치정보의 집합에, 상기 제 2 분기블록내위치정보검출부가 검출한 명령위치정보를 부가하는 제 2 명령위치정보부가부를 구비한 것을 특징으로 하고 있다.
제 1 발명의 컴파일러에 의하면, 점프검출수단에 의해서 상기 프로그램중의 점프명령과, 당해점프명령의 점프장소의 명령의 검출된다. 점프검출수단이 검출을 행하면, 점프검출수단이 검출한 명령에 의거해서 상기 프로그램이 분할수단에 의해서 기본블록으로 분할된다. 분할후, 프로그램중의 각변수에 대해서, 변수의 설정치가 유효하게 되는 프로그램중의 구간인 생존구간이 생존구간검출수단에 의해서 검출되고 검출결과가 생존구간내에 포함되는 명령의 위치를 표시한 명령위치정보의 집합으로 표시된다. 검출후, 생존구간검출수단에 의해서 검출된 생존구간이 1개의 기본블록내에 들어가는 변수가 기본블록내생존변수검출수단에 의해서 전부검출되고, 검출결과가 당해기록블록에 대응된 기본블록내생존변수집합으로 표시된다. 또 상기 생존구간이 복수의 기본블록간에 미치는 변수가 기본블록간생존변수검출수단에 의해서 전부검출되고, 검출결과가, 기본블록간생존변수집합으로 표시된다.
검출후, 기본블록간생존변수집합으로부터, 변수가 제 1 생존구간중복판정수단에 의해서 2개씩 꺼내지고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱이 산출되고, 생존구간의 중복이 판정된다. 또 동일한 기본블록 대응된 기본블록내생존변수집합과, 제 2 생존구간중복판정수단에 의해서, 변수가 2개씩 꺼내지고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱이 산출됨으로써 생존구간의 중복이 판정된다. 또, 상기 기본블록에 대응된 기본블록내생존변수집합으로부터, 기본블록간생존변수로부터 변수가 제 3 생존구간중복판정수단에 의해서 1개씩 꺼내지고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱이 산출됨으로써, 생존구간의 중복이 판정된다. 프로그램중의 변수의 생존구간의 중복판정은 이상의 판정처리에 의해서 전부완료한다. 이상의 판정처리에서는 기본블록내에만 생존구간이 들어가는 변수중, 다른 기본블록내에 속하는 것끼리의 중복판정처리가 결과로서 생략된다. 이와 같은 판정처리후, 제 1, 제 2, 제 3 생존구간중복판정수단의 판정결과를 사용해서 자원할당이 행해진다.
또, 제 2 발명에 있어서, 변수의 값을 설정하는 명령인 정의명령과 당해정의명령에 의해서 설정된 변수의 값을 사용하는 명령인 참조명령이 적어도 1 조순으로 배열되는 명령열인 단순블록이 단순블록형성수단에 의해서 기본블록내에 형성되는, 단순블록은, 정의명령과 참조명령이 차례로 배열되는 명령열이기 때문에, 당해정의명령에 의해서 정의되는 변수의 생존구간은 최단이 된다. 프로그래머가 작성한 소스프로그램 및 중간언어프로그램에는, 설정 및 사용이 1 회한도의 변수가 대다수를 차지하므로, 프로그램중의 대다수의 변수가, 상기 단순블록내에 수납된다.
단순블록형성후, 상기 기본블록내생존변수집합으로부터 생존구간이 1개의 단순블록내에 들어가는 변수가 단순블록내생존변수검출수단에 의해서 전부검출되고, 검출결과는 당해 단순블록에 대응한 단순블록내생존변수집합으로 표시된다. 또 상기 기본블록내생존변수집합으로부터 생존구간이 복수의 단순블록간에 미치는 변수가 단순블록간 생존변수검출수단에 의해서 전부 검출되고, 검출결과가 단순블록간 생존변수집합으로 표시된다.
단순블록내생존변수집합, 단순블록간 생존변수집합생성후, 변수가, 상기 단순블록간생존변수집합으로부터 제 1 생존구간중복판정부에 의해서 2개씩 꺼내지고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱이 산출됨으로써, 생존구간의 중복이 판정된다. 또, 동일한 단순블록에 대응된 단순블록내변수집합으로부터, 제 2 생존구간중복판정부에 의해서 변수가 2 개씩 꺼내지고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱이 산출됨으로써, 생존구간의 중복이 판정된다. 상기한 바와 같이, 단순블록에 있어서는, 변수의 생존 구간은 최단이 되고, 상기 집합곱의 산출은 간략한 것이 된다. 또, 상기 단순블록에 대응된 단순블록내변수집합과, 단순블록간생존변수집합으로부터, 제 3 생존구간중복판정부에 의해서, 변수가 1 개씩 꺼내지고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱이 산출함으로써, 생존구간의 중복이 판정된다.
또, 제 3 발명에 있어서, 기본블록간생존변수집합과 상기 단순블록에 대응된 단순블록내생존변수집합으로부터 제 4 생존구간중복판정부 의해서 변수가 1 개씩 꺼내지고, 당해 2 변수의 생존구간에 대응하는 명령위치집합의 집합곱이 산출됨으로써, 생존구간의 중복이 판정된다. 또, 기본블록간생존변수집합과 단순블록간 생존변수집합으로부터, 제 5 생존구간중복판정부에 의해서 변수가 1개씩 꺼내지고, 당해 2 변수의 생존구간에 대응하는 명령위치집합의 집합곱을 산출함으로써, 생존구간의 중복이 판정된다.
또, 제 4 발명에 있어서, 상기 단순블록형성수단은, 정의명령꺼내기수단에 의해서 기본블록으로부터 정의명령이 1개씩 꺼내진다. 정의명령꺼내기수단에 의해서 꺼내진 정의명령이 포함되는 기본블록으로부터, 대응참조명령검출수단에 의해서 정의명령꺼내기수단이 꺼낸 정의명령에 대응하는 참조명령이 검출된다. 검출후, 대응참조명령검출수단이 검출을 행한 정의명령이, 대응참조명령검출수단이 검출한 참조명령의 위치에 이동가능한지 아닌지가 정의명령이 동기부판정수단에 의해서 판정된다. 이 판정에 있어서 정의명령이동가부판정수단이 가능하다고 판정한 경우, 정의명령이동가부판정수단이 가능하다고 판정한 정의명령이 정의명령이동수단에 의해서 당해 정의명령에 대응하는 참조명령의 직전에 이동되고, 당해 정의명령 및 참조명령이 1 개의 단순블록에 통합된다. 정의명령이동수단이 이동한 정의명령이 이동전에 있어서 단순블록내의 최후의 명령일 경우, 단순블록나머지명령이동수단에 의해서 이동전의 단순블록의 나머지명령의 전부가 당해 정의명령의 이동장소의 직전에 이동되고, 이동한 나머지명령이, 이동장소의 단순블록에 통합된다.
또, 제 5 발명에 있어서, 상기 정의명령꺼내기수단이 꺼낸정의명령에 의해서 값이 설정되는 변수가 1 개인지 아닌지가 변수단복판정부에 의해서 판정된다. 상기 변수단복판정부가 1 개라고 판정한 경우, 상기 대응참조명령검출수단이 검출한 참조명령이 1 개인지 아닌지가 참조명령단복판정부에 의해서 판정된다. 상기 참조명령단복판정부가 1 개라고 판정한 경우, 당해 참조명령에 대응하는 정의명령에 의해서 값이 설정되는 변수가, 당해 정의명령으로부터 당해 참조명령까지의 구간에 있어서 재설정되는지 아닌지가, 제 1 재설정유무판정부에 의해서 판정된다. 상기 제 1 재설정유무판정부가 재설정이 없다고 판정하면 당해정의 명령에 있어서 사용되는 변수가 정의명령내사용변수검출부에 의해서 검출된다. 당해 정의명령으로부터 당해 참조명령까지의 사이에 있어서, 상기 정의명령내사용변수검출부가 검출한 변수가 재설정되지 않는 것이 제 2 재설정유무판정부에 의해서 판정된다. 상기 제 2 재설정유무판정부가 재설정이 없다고 판정하면, 당해 정의명령이 당해 참조명령의 위치에 이동가능한 것이 이동가부판정부에 의해서 판정된다.
또, 제 6 발명에 있어서, 상기 정의명령꺼내기부의 의해서 상기 프로그램으로부터 정의명령이 1개씩 꺼내진다. 꺼내진 정의명령을 포함한 기본블록과, 당해 정의명령에 의해서 설정되는 변수가 출구무효판정부에 의해서 검출되고, 검출된 변수의 설정치가 당해기본블록의 출구에서 무효한지 아닌지가, 상기 유효변수정보기억수단의 기억내용에 의거해서 판정된다. 상기출구무효판정부가 설정치무효라고 판정한 경우, 당해 기본블록으로부터 당해 정의명령에 대응하는 참조명령으로서, 당해 기본블록의 출구에 가장 가까운 것이 출구최근참조명령검출부에 의해서 검출된다. 참조명령의 검출후 당해 정의명령의 다음의 명령으로부터 출구최근참조명령검출부가 검출한 참조명령까지의 명령위치정보가, 기본블록내명령위치검출부에 의해서 전부 검출된다. 명령위치정보의 검출후, 명령위치정보가 검출된 변수에 대해서의 생존구간이, 기본블록내생존구간표현부에 의해서 기본블록내명령위치검출부가 검출한 명령위치정보의 집합으로 표시된다. 한편, 상기 기본블록내생존구간표현부가 생존구간을 표현한 변수가, 상기 기본블록내생존변수검출수단에 의해서, 당해변수가 포함되는 기본블록에 대응하는 기본블록내생존변수집합의 멤버에 추가된다.
또, 제 7 발명에 있어서, 상기 출구무효판정부가 유효하다고 편정한 경우, 상기 기본블록내정의정보기억수단의 기억내용에 의거해서, 상기 출구무효판정부에 의해서 유효하다고 판정된 정의명령에 있어서 설정되는 변수가, 재설정유무판정부에 의해서 당해정의명령으로부터 당해 정의명령을 포함한 기본블록의 출구까지의 사이에 재설정되는지 아닌지가 판정된다. 상기 재설정유무판정부가 재설정없다고 판정한 경우, 출구유효위치정보검출부에 의해서 당해 정의명령의 다음 명령으로부터 당해기본블록의 출구까지의 명령위치정보가 검출된다. 상기 재설정유무판정부가 재설정없다고 판정함으로써 상기 유효변수정보기억수단 및 기본블록내정의정보기억수단의 기억내용에 의거해서, 당해 정의명령이 포함되는 기본블록의 다음순서의 기본블록중, 당해변수가 그 입구 및 출구에서 유효하고, 또한 그 내부에서 당해변수가 재설정되지 않는 것의 전부가 생존기본블록검출부에 의해서 검출된다. 상기 기본블록내정의정보기억수단의 기억내용에 의거해서 기본블록간위치정보검출부에 의해서 상기 생존기본블록검출부가 검출한 기본블록내에 포함되는 명령위치정보가 전부 검출된다.
상기 재설정유무판정부가 재설정없다고 판정함으로써, 당해 정의명령이 포함되는 기본블록의 다음순서의 기본블록중, 그 입구에서 당해변수의 값이 유효하고, 그 출구에서 무효한 기본블록이 말미기본블록검출부에 의해서 검출된다. 기본블록의 검출후, 상기 말미기본블록검출부가 검출한 기본블록으로부터, 말미참조명령검출부에 의해 이 정의명령에 대응하는 참조명령이 검출된다. 참조명령의 검출후, 상기 말미기본블록검출부가 검출한 기본블록의 입구로부터 상기 말미참조명령검출부가 검출한 참조명령까지의 명령위치정보가, 입구유효시위치정보검출부에 의해서 전부 검출된다. 명령위치정보의 검출후, 명령위치정보가 검출된 변수에 대응하는 생존구간의 집합이, 기본블록간생존구간표현부에 의해서 출구유효시위치정보검출수단의 검출결과와, 입구유효시위치정보검출수단의 검출결과와, 기본블록간위치정보검출수단의 검출결과를 합한 집합으로 표시된다.
한편, 재설정유부판정부가 재설정없다고 편정한 변수는, 상기 기본블록간 생존변수검출수단에 의해서 기본블록간 생존변수집합의 멤버에 추가된다.
또, 제 8 발명에 있어서, 마킹부에 의해서 상기 정의명령꺼내기부가 꺼낸 정의명령의 위치에 식별정보가 붙여진다. 마킹부에 의한 마킹후, 당해 정의명령에 대응하는 참조명령에서 사용되는 변수가, 참조변수검출부에 의해서 검출된다. 변수의 검출후, 참조-정의정보기억수단의 기억내용에 의거해서 상기 참조변수검출부가 검출한 변수에 설정치를 설정한는 정의명령이, 정의명령검출부에 의해서 전부 검출된다. 정의명령의 검출후, 상기 정의명령검출부가 검출한 정의명령중, 상기 마킹부에 의해서 붙여진 식별종보가 없는 것이 무마크정의명령검출부에 의해서 전부 검출된다. 식별정보없음 정의명령의 검출후, 상기 무마크정의명령검출부가 검출한 정의명령의 다음의 명령으로부터, 그 정의명령을 포함한 기본블록의 출구까지의 명령위치정보가, 제 1 분기블록내위치정보검출부에 의해서 전부 검출된다. 명령위치정보의 검출후, 기본블록간생존구간표현부가 표시한 명령위치정보의 집합에, 제 1 명령위치정보부가부에 의해서, 상기 제 1 분기블록내위치정보검출부가 검출한 명령위치정보가 부가된다.
또, 제 9 발명에 있어서, 상기 정의-참조정보기억수단의 기억내용에 의거해서, 분기블록내참조명령검출부에 의해서 상기 무마크정의명령검출부가 검출한 정의명령에 대응하는 참조명령이 검출된다. 참조명령의 검출후, 상기 분기블록내참조명령검출부가 검출한 참조명령를 포함한 기본블록이 분기블록검출부에 의해서 검출된다. 참조명령의 검출후, 상기 분기블록검출부가 검출한 기본블록의 입구로부터 상기 분기블록내참조명령검출부가 검출한 참조명령까지의 명령위치정보가, 제 2 분기블록내위치정보검출부에 의해서 전부 검출된다. 명령위치정보의 검출후, 상기 기본블록간 생존구간표현부가 표시한 명령위치정보의 집합에, 상기 제 2 분기블록내위치정보검출부가 검출한 명령위치정보가 제 2 명령위치정보부가부에 의해서 부가된다.
이하, 본 발명의 컴파일러의 일실시예를 도면을 사용해서 설명한다.
먼저, 본 명세서에 있어서만 인용하는 용어를 이하에 설명해둔다.
·기본블록
프로그램중의 연속명령열로서, 열의 도중에 점프도 없고, 또 도중에의 점프도 없는 것을 말한다. 이 기본블록의 일예를 제 16 도에 표시한다. 본 실시예에서는 처리대상을 중간언어프로그램으로 하고 있으므로, 상기 명령열은, 중간언어의 것이 주어진다.
또, 판단처리, 혹은 다방향분리처리내의 기본블록을 제 13 도를 참조하면서 설명한다.
제 13 도(a)에 표시한 바와같이, 기본블록이란 열의 도중에 점프도 없고, 또 도중에서 점프도 없고 것을 가리키므로, C언어풍의 if(p)문으로 표시되는 판단처리에 있어서, 선택적으로 실행되는 처리 S1, S2는, 각각 1개의 기본블록 B1, B2가 된다. 이와같이 처리 S1, S2에 상당하는 기본블록 B1,B2를 분기기본블록이라 칭한다.
또, 제 13 도(b)에 표시한 바와같이, C언어에서 switch(p)문으로 표시되는 다방향분기처리에 있어서, 선택적으로 실행되는 처리 S1, S2, S3, S4…는 각각 1개의 기본블록 B1, B2, B3, B4,…가 된다.
또, 프로그램중의 1 개의 문 혹은 중간코우드명령등, 중간언어프로그램의 1 실행단위를 중간언어스텝이라고 부르기도 한다.
ㆍ변수의 정의, 참조
어떤 변수에 값을 설정하고 있는 중간언어스텝을 그 변수의 정의라고 하고 정의된 값을 사용하고 있는 중간언어스텝을 변수의 참조라고 한다. 반대로 변수에 값을 설정하는 것을 변수를 정의한다고 한다. 또 변수의 값을 사용하는 것을, 변수를 참조한다고 한다.
ㆍ생존변수에 관한 정보
소스프로그램, 중간언어프로그램을 막론하고, 프로그램중의 스텝의 협간을 점이라고 하고, 그 점에 있어서 변수에 격납되어 있는 값이 유효할때, 그점에서 당해변수는 살아있다고 한다. 또 기본블록 B의 입구의 점에 살아있는 변수의 집합은, LiveIn[B]라고 표시되고, 기본블록 B의 출구의 점에서 살아있는 변수의 집합은 LiveOut[B]라고 표시된다. 또 기본블록 B내에 정의가 있는 변수의 집합을 Def[B]로 표시한다. 또한 이 변수집합 Def[B],는 생존변수에 관한 정보를 구하는 과정에 얻어진다. 제 16 도에 표시한 프로그램예에서의 집합 LiveIn[B], 집합LiveOut[B]를 제 17 도(a)에 표시한다. 본 도면에 있어서, 기본블록 B1의 입구에서 살아있는 변수는 [p1,p2,p3]인 것을 알 수 있고 출구에서 살아있는 변수는 「z1,a,b」인것이 표시된다.
ㆍ정의-참조정보, 참조-정의정보
정의- 참조정보란, 정의에 의해서 설정된 설정치가 어디에서 사용되고 있는지가 표시되는 정보이고, 그 일예를 제 17 도(b)에 표시한다(정의에 의해서 설정된 설정치를 참조에 의해서 사용하는 것을, 정의가 참조에 도달한다고 한다), 제 17 도(b)의 일예에서는, 중간언어스텝 s1에서 정의되고 있는 변수t1은, 중간언어스텝 s2에서 참조되는 것을 알 수 있다.
참조-정의정보란, 참조에 의해서 사용된 설정치가 어디에서 정의되고 있는지가 표시되는 정보이고, 그 일예를 제 17(c)에 표시한다. 본 도면에 있어서, 중간언어스텝 s2에서 참조되는 변수는, 변수 t1, p3이고, 이들의 어느 하나는 중간언어스텝s1에서 정의된다.
ㆍ변수에 대해서의 주의
변수중에는, 그 생존구간을 복수 가진 것이 있다. 이 경우, 생존구간마다 다른 레지스터를 할당할 수 있고, 또, 그렇게 한편의 목적프로그램을 보다 잘 할 수 있다. 그 때문에 생존구간이 복수 있는 경우에는, 생존구간마다 1개의 변수가 존재하는 것으로 한다. 이것을 제 13 도(c)를 참조하면서 설명한다. 제 13 도(c)에 있어서, 「x=10」에서 정의되는 변수 x는, 「y=x+5」에서 참조되므로, 「x=10」에서 정의되는 변수x의 생존구간은 도면중의 L5가 된다. 한편, 「x=20」에서 정의되는 변수x는 「y=x+30」에서 참조되므로 「x=20」에서 정의되는 변수 x의 생존구간은 도면중의 L6이 된다.
한편, 제 13 도(d)에 있어서, 「x=40」에서 정의되는 변수x는 참조되지 않는 그대로, 「x=30」에서 재정의되므로, 「x=40」에서 정의되는 변수 x의 생존구간은, 생존하지 않게 된다. 즉, 「x=40」에서 정의되는 변수x는 생존하지 않는다고 판정된다. 「x=30」에서 정의된는 변수x는 「y=x+50」에서 참조되므로, 「x=30」에서 정의되는 변수x의 생존구간은 도면중의 L7이 된다.
ㆍ생존구간에 대해서의 주의
생존구간은 기본블록의 집합, 중간언어스텝의 집합으로 표시된다. 본 실시예에서는, 상세한 정보가 필요하게 되기때문에, 후자의 것이 채용되고 있다. 또, 생존구간의 중복, 비중복을 집합곱에 의해서 판정하기 때문에, 생존구간의 종시가 일치하는 중간언어스텝에서는 생존구간은 겹치지 않는다고 하고 있다. 그 때문에, 변수의 생존구간을 스텝집합으로 표시하는 경우, 정의의 스텝은, 당해 집합에 포함되지 않는다.
이상의 변수 및 생존구간에 관한 정보, 정의-참조정보, 참조-정의정보에 대해서는, 이하의 문헌에 상세하게 기록되어 있다.
A.Aho, R.Sethi, J.U1man : Compilers Principles, Techniques, and Tools,Addison Wesley, 1988
이하, 본 발명의 생존구간중복검사장치의 일실시예를 도면을 사용해서 설명한다. 제 1 도는, 본 발명의 제 1 실시예에 있어서의 컴파일러의 구성도이다. 컴파일러는, 구문해석장치(1)와 최적화장치(2)와, 자원할당장치(3)와, 코우드생성장치(4)로 구성되어 있다.
구문해석장치(1)는, 파일로서 기억되어 있는 소스프로그램의 자구해석, 구문해석, 및 의미해석을 행한다. 해석결과는, 중간언어프로그램으로서 출력된다. 소스프로그램의 일예를 제 14 도에 표시하고, 당해 소스프로그램에 대응하는 중간언어프로그램의 일예를 제 15 도에 표시한다.
최적화장치(2)는 최종적으로 생성되는 기계어프로그램의 프로그램사이즈를 삭감하고, 실행시간을 단축시키는 목적에서 중간언어프로그램의 최적화를 행한다.
자원할당장치(3)는, 프로그램의 변수의 생존구간을 구하고, 생존구간마다 변수의 생존구간을 구하고, 생존구간마다 변수에 자원인 레지스터나 메모리에 할당한다.
코우드생성장치(4)는 최적화된 중간언어프로그램을, 자원할당장치(3)의 할당결과에 따라서 타겟머신의 기계어명령으로 변환하고, 목적프로그램으로서 출력한다.
제 2 도는 제 1 도에 표시한 최적화장치(2)의 구성도이다. 이 최적화장치(2)의 상세한 것에 대해서는 본 발명의 주안이 아니므로 설명을 생략하고, 본 발명의 컴파일러와 특히 관계가 있는 점만을 설명한다. 최적화장치(2)는, 제어플로해석부(5)와 데이터플로해석부(6)와, 최적화처리부(7)와, 단순블록생성부(8)로 구성된다.
제어플로해석부(5) 및 데이터플로해석부(6)에서는, 기본블록화, 제어플로해석, 데이터플로해석과 같은 작업을 행한다. 기본블록화란, 처리대상의 프로그램을, 이후의 처리단위인 기본블록으로 분할하는 것이다.제 15 도에 표시한 중간언어프로그램에 대해서의 기본블록을 제 16 도에 표시한다. 또 제어플로해석이란, 각 기본블록간의 제어의 흐름을 해석하는 것이다. 또 데이터플로해석이란, 각 기본블록간의 제어의 흐름을 해석하는 것이다. 또 데이터플로해석이란 각 기본블록의 내부를 조사하여, 각각의 변수가 어디에서 정의되고, 어디에서 참조되고 있는지에 대해서 해석하는 것이다. 이들 처리에 의해서, 데이타정보, 정의-참조정보 및 참조-정의정보가 얻어진다. 이상의 3정보의 일예를 제 17 도(a)(b)(c)에 도시한다. 본 일예는 제 16 도에 표시한 중간언어프로그램에 대한 것이다. 제 17 도(a)에 표시한 데이터플로정보에 있어서, 기본블록 B1의 입구에서는, 변수 p1, p2, p3 이 살아있는 것이 표시된다. 또, 기본블록 B1의 출구에서는 변수 z, a, b 가 살아있는 것이 표시된다. 제 17 도(b)에 있어서, 중간언어스텝s1에서 정의되는 변수 t1은, 중간언어스텝s2에서 참조되는 것이 표시된다. 제 17 도(c)의 참조-정의정보에 있어서 중간언어스텝 s2에서 참조되는 변수 t1, p3은, 중간언어스텝 s1에서 정의되는 것이 표시된다.
최적화처리부(7)는, 제어플로해석부 (5) 및 데이터플로해석부(6)의 처리결과를 사용해서 중간언어프로그램에 대한 최적화를 행한다. 이 부분은 본 발명의 주안이 아니므로 그 상세한 것은 생략한다.
단순블록생성부(8)는, 기본블록을 복수개의 소블록으로 분할하고, 분할후, 소블록끼리의 통합이 가능한지 아닌지를 판정해서 당해 판정에서 가능하다고 판정된 것끼리 통합하고, 정의와 참조가 적어도 1 조순으로 배열되는 스텝열을 형성한다. 단순블록생성부(8)는, 이 통합처리에 의해서 기본블록내의 생존구간의 중복을 보다 단순한 것으로 한다. 이와 같은 통합처리에 의해서, 최종적으로 형성되는 소블록은 단순블록이라고 칭한다. 단순블록생성전의 생존구간의 중복을 제 18 도에서 도시하고, 생성후의 생존구간의 중복을 제 20 도에 도시한다. 제 20 도와 제 18 도에서는 제 20 도의 쪽이, 비교적으로 생존구간의 중복이 보다 단순하게 되고, 생존구간의 중복수가 감소하므로, 자원할당부에서 필요로 하는 레지스터수도 적은 것이어도 된다.
단순블록생성부(18)의 처리과정을 제 3 도의 순서도, 제 4 도의 설명도를 참조하면서 설명한다. 제 3 도는 단순블록을 생성하는 순서를 표시한 순서도이고, 제 4 도는, 제 3 도의 순서도의 각 스텝에서의 처리를 도면적으로 표시한 설명도이다.
스텝A1에 있어서 단순블록생성부(8)는, 기본블록내의 각중간언어스텝을 1개의 소블록으로 한다. 제 18 도에서 표시한 프로그램의 기본블록 B1에 대해서, 이 처리를 행하면, 기본블록B1내부는, 제 19 도(a)에 표시한 것이 된다. 제 19 도(a)에 있어서, 중간언어스텝 s1은 소블록BP1이 된다. 또, 중간언어스텝 s2는 소블록PB2가 된다. 마찬가지로 중간언어스텝 s3, s4, s5…는 소블록PB3, PB4, PB5…가 된다.
스텝A2에 있어서, 단순블록생성부(8)는 소블록을, 제 4 도(a)의 화살표 b11, 12에 표시한 바와 같이 실행순으로 소블록을 1개씩 꺼낸다.
스텝 A3에 있어서 단순블록생성부(8)는, 꺼낸 소블록b1이 기본블록내에서 최후의 것인지를 판정하고, 최후의 경우 처리를 종료한다. 소블록 b1이 최후가 아닐 경우, 스텝 A4를 행한다.
스텝A4에 있어서 단순블록생성부(8)는, 소블록b1이 최후에 있는 중간언어스텝s1을 꺼낸다.
스텝 A5에 있어서 단순블록생성부(8)는, 제 4 도(b)에 표시한 바와 같이, 꺼낸 중간언어스텝s1에서 정의되는 변수v가 1 개인지 복수인지의 판정을 행하고, 복수의 경우, 스텝 A2를 행한다. 단수일 경우, 스텝 A6을 행한다.
스텝A6에 있어서, 단순블록생성부(8)는, 제 4 도(c)에 표시한 바와 같이 변수 v의 참조가 기본블록내에 존재하는지 아닌지, 즉, 변수의 생존구간의 길이가 다른 기본블록에 미치는지 아닌지를 판정한다. 미치는 경우 스텝 A2를 행하고, 미치지 않는 경우, 스텝A7을 행한다.
스텝 A7에 있어서, 제 4 도(d)에 표시한 바와같이, 그 변수v의 참조가 1회뿐인 것을 판정한다. 이판정은, 정의- 참조정보로부터 변수v의 참조횟수를 조사함으로써 행해진다. 복수회이면 스텝A2를 행하고, 1회뿐이면 스텝 A8을 행한다.
스텝 A8에 있어서, 단순블록생성부(8)는, 제 4도(e)에 표시한 바와 같이, 정의 s1로부터 변수v의 참조까지 변수v가 재정의되고 있는지를 판정한다. 정의되고 있는 경우 스텝A2를 행한다. 정의되고 있지 않은 경우는, 스텝A9를 행한다.
스텝 A9에 있어서, 단순블록생성부(8)는, 제 4 도(f)에 표시한 바와같이, 변수v가 의존하는 변수vx, 즉, 소블록b1내에서 참조되는 변수가, 정의s1로부터 변수v의 참조까지 재정의되는지 아닌지를 판정하다. 재정의될때에는 스텝A2를 행하고, 재정의가 없는 경우는 스텝A10을 행한다. 여기서 의존이 있는 변수란, 당해변수의 설정치에 영향을 미칠 수 있는 모든 변수를 말한다. 상기한 바와 같이, 소블록b1은 참조와 정의가 차례로 배열되는 스텝열로 형성되어가므로, 소블록b1은, 변수v가 의존하는 변수를 전부 포함하고 있다. 예를 들면, 제 19 도(d)의 소블록 PB7로 표시한 변수x의 설정치는, 변수 x4, t1, p3, p1, p2의 설정치의 영향을 받으므로, 변수 x는, 변수x4, t1, p3, p1, p2에 의존한다고 한다. 만약 의존변수의 정의 즉, 변수 x4 , t1, p3, p1, p2의 정의가, 변수 x의 정의로부터 참조까지의 구간에 존재하면, 변수x의 정의명령을 참조명령의 위치에 이동하는 것은 상기 생존관계를 손상하게 된다. 이와 같은 의존관계의 손실을 고려해서, 단순블록생성부(8)는 이동가, 이동불가를 판정한다.
스텝 A10, 스텝 A11, 스텝A12에 있어서, 단순블록생성부(8)는 소블록b1을 빼내고, 빼낸 소블록b1을, 변수v의 참조(중간언어스텝s2)가 속하는 소블록b2의 선두에 삽입한다. 또는 소블록b1을 스텝S2의 직전에 삽입해도 된다. 이 빼내기 및 삽입처리에서 소블록b1 및 b2가, 1개의 소블록에 통합된다. 이와 같은 통합을 행한 후, 단순블록생성부(8)는 소블록b1을 삭제한다. 제 19 도 (a)에 표시한 일예에서는, 소블록 PB1이 빠져나오고, 소블럭 PB2의 직전에 삽입되어, 제 19 도(a)에 표시한 소블록 PB1, PB2는 소블록 PB2로 통합된다(화살표선g12참조). 그 결과, 소블록PB2는 제 19 도(b)에 표시한 바와같이, 중간언어스텝 s1, s2를 멤버에 포함하게 된다. 또, 소블록 PB2가 빠져나오고, 소블록 PB7의 직전에 삽입되어, 제 19 도(b)에 표시한 소블록PB2, PB7은 소블록 PB7로 통합된다(화살표선 g27참조). 그 결과, 소블록PB7은, 제 19 도(c)에 표시한 바와 같이 중간언어스텝 s1, s2, s7을 멤버에 포함하게 된다. 마찬가지로, 화살표선 g38로 표시한 바와같이 소블록PB3 및 PB4가 PB8로 통합되고, 또 화살표선g59로 표시한 바와 같이, 소블록 PB5 및 PB6, PB9로 통합되므로, 소블록PB8 은, 중간언어스텝 s3, s4, s8을 멤버로서 포함하게 되고, 소블록 PB9는, 중간언어스텝 s5, s6, s9를 멤버로서 포함하게 된다. 이상의 통합에 의해서 소블록 PB7, PB8, PB9가 단순블록이 된다.
이상의 스텝 A1∼스텝 A12의 순서를, 단순블록생성부(8)는, 제 4 도(a)에 화살표 b11,b12로 표시한 바와 같이, 나머지의 소블록에 대해서 반복한다. 이들 단순블록에 있어서, 그 내부의 중간언어스텝은, 처음부터 끝의 1스텝전까지, 변수의 참조가 1 회뿐인 것만으로 구성되게 된다. 또, 그 변수의 참조가 행해지는 중간언어스텝은, 변수의 정의가 행해지는 중간언어스텝과 동일한 단순블록이 된다.
제 5 도는, 제 1 도에 표시한 자원할당장치(3)의 구성도이다.
생존구간중복판정부(9)는, 생존구간을 생성하고 그 생존구간의 중복을 검출한다. 변수자원할당부(10)는, 생존구간중복판정부(9)가 구한 생존구간의 정보를 사용해서, 자원인 레지스터나 메모리를 변수에 할당한다. 이때, 생존구간이 겹치는 변수에 있어서는 다른 레지스터를 변수에 할당한다.
제 5 도는, 제 1 도의 자원할당장치(3)의 구성도이다.
자원할당장치(3)는, 생존구간유지부(11), 단순블록내생존변수집합유지부(12), 기본블록내생존변수집합유지부(13), 기본블록간생존변수집합유지부(14), 생존구간생성부(15), 생존구간중복검사부(16)로 구성된다.
생존구간유지부(11)는, 중간언어스텝에 의해서 표현된 생존구간을, 변수와 대응해서 유지한다. 또 각 변수가 어느 단순블록에 있는지, 또 어느기본블록에 있는지를 대응시키고 있다. 생존구간유지부(11)의 유지내용의 일예를 제 21 도(a)에 표시한다. 이것은 제 20 도에 표시한 프로그램예와 대응하고 있다. 본 도면을 참조하면서, 변수 t1의 생존구간은 중간언어스텝s2뿐이고, 또, 변수 t1은 단순블록 PB7에 속하고, 기본블록 B1에 속하는 것이 명확하게 된다.
단순블록내생존변수집합유지부(12)는, 단순블록내에만 생존구간이 존재하는 변수를 당해 단순블록과 대응시켜 유지한다. 이와 같이 단순블록내에만 생존구간이 존재하는 변수는, 단순블록내변수집합이라고 칭한다. 단순블록내생존변수집합유지부(12)의 유지내용의 일예를 제 21 도(b)에 표시한다. 본 도면도 제 20 도에 표시한 프로그램예와 대응되고 있다. 본 도면을 참조하면, 단순블록 PB7은 변수t1과, 변수 x4를 포함한 것을 알 수 있다.
기본블록내생존변수집합유지부(13)는, 기본블록내에만 생존구간이 존재하는 변수로서, 그 생존구간이, 복수의 단순블록간에 걸친 것을 당해 기본블록과 대응시켜 유지한다. 이 기본블록내생존변수집합유지부(13)가 유지하는 변수의 집합은, 기본블록내변수집합이라고 칭한다.
기본블록내생존변수집합유지부(13)의 유지내용의 일예를 제 21 도(c)에 표시한다. 본 도면도 제 20 도에 표시한 프로그램예와 대응되고 있다. 본 도면을 참조하면, 단순블록B1의 기본블록내변수집합은, 변수x와, 변수y를 포함한 것을 알 수 있다.
기본블록간생존변수집합유지부(14)는, 변수중, 생존구간이 복수의 기본블록간에 걸친 것의 집합을 유지한다. 기본블록간생존변수집합유지부(14)가 유지하는 변수의 집합은 기본블록간변수집합이라고 호칭한다. 기본블록간생존집합유지부(14)의 유지내용의 일예를 제 21 도(d)에 표시한다. 본 도면은 제 20 도에 표시한 프로그램예와 대응되고 있다. 본 도면을 참조하면, 변수z, a, b는 그 생존구간이 복수의 기본블록간에 걸쳐있는 것을 알 수 있다.
생존구간생성부(15)는 변수의 생존구간을 중간언어스텝의 집합으로 표현하고, 당해 생존구간의 범위에 의해서, 변수를 3개의 집합으로 분류한다. 생존구간생성부(15)의 처리는, 생존구간생성처리, 정의마다 생존구간검출처리 및 후속블록생존구간검출처리로 대별되고, 또 상기의 3개의 집합이란, 앞에 설명한 단순블록내변수집합, 기본블록내변수집합, 기본블록간생존변수집합이다. 이 분류는 변수의 격납처를, 단순블록내생존변수집합유지부(12), 기본블록내생존변수집합유지부(13), 기본블록간생존변수집합유지부(14)로 절환함으로써 행해진다.
생존구간생성부(15)의 처리과정을 제 7 도, 제 8 도, 제 9 도, 제 10 도의 순서도를 참조하면서 설명한다.
제 7 도는 생존구간생성처리의 순서도, 제 8 도는 정의마다 생존구간검출처리의 순서도, 제 9 도는 후속블록탑색처리의 순서도, 제 10 도는 후속블록생존구간검출처리의 순서도이다.
제 7 도의 스텝 B1 에 있어서, 생존구간생성부(15)는, 미처리의 정의가 존재하는지 아닌지를 판정한다. 처리완료인지 미처리인지는, 정의에 붙여지는 마크에 의해서 판별된다. 존재할때, 스텝 B2 를 행하고, 그렇지 않을때는 처리를 종료한다.
스텝 B2, B3, B4, B5에 있어서, 생존구간생성부(15)는 먼저 기본블록을 미탐색으로해서, 미마크의 정의 s1을 꺼내고, 정의 s1에 마크를 붙이고, 정의마다 생존구간검출처리를 행한다.
이상의 스텝 B1, B2, B3, B4, B5의 처리는, 모든 중간언어스텝이 마크될때까지 반복된다.
제 8 도에 표시한 스텝 C2에 있어서, 생존구간생성부(15)는 중간언어스텝s에서 정의되는 변수 v가 기본블록B의 출구에 있어서, 살아있는것, 즉, 변수v가 Live Out[B] 에 속하는 것을 판정하고 존재하는 경우, 스텝C18을 행하고, 존재하지 않는 경우, 스텝 C3∼스텝C7을 행한다.
스텝 C18에 있어서 생존구간생성부(15)는 정의s의 다음의 중간언어스텝으로부터 B의 최후의 중간언어스텝까지 정의 s이외의 변수 v의 정의가 존재하지 않는 것을 판정한다. 존재하지 않을때 스텝 C8∼스텝C16을 행하고, 존재할때 스텝C3∼스텝C7을 행한다.
스텝C3, C4에 있어서, 생존구간생성부(15)는, 기본블록B의 출구로부터 입구에 향하는 방향을 향해서 탐색을 행하고, 변수 v의 참조s1을 찾는다. 이 탐색작업은, 정의 S의 정의-참조정보를 참조함으로써 행해진다. 참조s1을 찾으면, 생존구간생성부(15)는, 정의s의 다음의 중간언어스텝으로부터 참조s1까지의 중간언어스텝을 변수v의 생존구간으로서 생존구간유지부(11)에 격납한다.
스텝C5, 스텝C6, 스텝C7에 있어서 생존구간생성부(15)는 정의s가 속하는 단순블록 pb와, 참조 s1이 속하는 단순블록이 동일한지 아닌지 판정하고, 동일한 경우(스텝C5), 생존구간생성부(15)는, 정의s를 단순블록내생존변수집합유지부(120에 격납하고(스텝C6), 그렇지 않은 경우, 즉, 정의s가 속하는 단순블록 pb와 참조 s1이 속하는 단순블록이 다른 경우(스텝C5), 변수 v를 기본블록내생존변수집합유지부(13)에 격납하고 (스텝C7), 스텝 C17로 진행한다.
스텝C8, C9에 있어서, 생존구간생성부(15), 변수 v를 기본블록간생존변수집합유지부(14)에 격납하고(스텝C8), 정의 s의 다음의 중간언어스텝으로부터 기본블록B의 최후의 중간언어스텝까지를, 변수 v의 생존구간으로서 생존구간유지부(11)에 격납한다(스텝C9). 단, 정의 s자체가 기본블록B의 최후의 중간언어스텝일때는 생존구간유지부(11)에는 아무것도 격납하지 않는다.
스텝C10에 있어서, 생존구간생성부(15)는 실행순이 기본블록B의 다음의 것(후속기본블록)을 꺼내고, 그 후속기본블록B1의 LineIn[B1]을 참조해서, 후속의 기본블록B1이 미탐색이고, 또한 그 입구에서 변수v가 살아있는 것을 확인한다. 확인후, 정의 s 및 기본블록 B1을 처리대상으로 해서, 후속블록탐색처리를 행한다.
제 9 도는, 후속블록탐색처리의 순서도이다.
스텝 F1, F2, F3, F4, F5에 있어서, 생존구간생성부(15)는, LiveIn[B1]에 변수 v가 속하는지를 판정하고(스텝F2),속하는 경우 기본블록B1은 미탐색인지 아닌지를 판정한다(스텝F3). 미탐색이면, 후속블록생존구간검출처리를 행한다(스텝F4). 만약 미탑색이 아니면, 기본블록B의 후속기본블록B1이 탐색될때가지(스텝F3), 이상의 처리를 반복한다(스텝F1,F5).
제 10 도는 후속블록생존구간검출처리의 순서를 표시한 순서도이다.
스텝D1에 있어서, 생존구간생성부(15)는 기본블록B를 탐색완료로 한다.
스텝D2에 있어서, 생존구간생성부(15)는, 중간언어스텝s에서 정의되는 변수v가, 기본블록B의 출구에서 살아있는 것을 판정한다. 살아있는 경우 스텝D8을 행하고, 그렇지 않은 경우 스텝 D5∼스텝 D6을 행한다. 상기 판정은 구체적으로 생존구간생성부(15)가 변수 v가 LiveOut[B]에 v가 속하고 있는 것을 확인함으로써 행해진다.
스텝D8에 있어서, 생존구간생성부(15)는, 기본블록B에 변수 v의 정의가 존재하지 않는 것을 판정하고, 이 경우, 스텝D3∼스텝D4를 행한다. 그렇지 않을때 스텝 D5∼D6을 행한다. 이 판정은 구체적으로는 Def[B]에 변수 v가 속하지 않는 것을 확인함으로써 행해진다
스텝D3에 있어서, 생존구간생성부(15)는, 기본블록B1의 입구로부터 출구까지의 중간언어스텝을 변수v의 생존구간으로 한다(스텝D3).
스텝D4에 있어서 생존구간생성부(15)는, 후속블록탐색처리를 행한다.
스텝D5에 있어서, 생존구간생성부(15)는, 정의s의 정의-참조정보에 의거해서, 기본블록B의 출구로부터 입구를 향해서 탐색을 행하고, 변수v의 참조s1을 찾는다.
스텝D6에서는 B의 선두의 중간언어스텝으로부터 참조s1까지를 v의 생존구간으로서 생존구간유지부(11)에 격납하고, 제 10 도에 표시한 후속블록생존구간검출처리를 종료한다.
스텝 C12, C13, C14의 루프처리에 있어서 생존구간생성부(15)는, 참조s2에 도달하는 나머지 모든 정의인 정의 s3에 대해서, 생존구간생성처리를 재귀적으로 행하고, 변수 v의 생존구간의 정보에, 이 정의 s3에 대해서의 생존구간의 정보를 부가한다. 이 정의 s3의 소재의 찾아내기는, 참조s2의 참조-정의정보를 참조함으로써 행해진다. 상기 정의 s3은, 상기한 분기기본블록내에 있고, 이들을 전부 찾아내기 때문에, 스텝 C12, C13, C14의 처리는 반복된다.
스텝C11, C15, C16에 생존구간생성부(15)는, 프로그램중의 판단분기처리 혹은 다방향분기처리가 존재하고, 또 상기 참조s2가 1개의 분기 기본블록내에 있는 경우, 생존구간생성부(15)는, 나머지의 분기기본블록내에 있는 나머지 모든 참조를 구한다. 각각의 참조s2에 대해서, 스텝C12, C13, C14의 루프처리를 반복하여 행한다.
스텝C17에서는, 정의마다 생존구간검출처리를 종료한다.
이상의 순서에 의해, 변수는 단순블록내생존변수집합유지부(12)나 기본블록내생존변수집합유지부(13)나, 기본블록간생존변수집합유지부(14)의 어느하나에 격납되고, 이들 유지부의 유지내용에 제 21 도(b),(c),(d)에 표시한 것이 된다.
생존구간중복생성부(16)는, 변수의 생존구간의 중복을 검사한다. 당해검사는, 단순블록내생존변수집합유지부(12), 기본블록내생존집합유지부(13), 기본블록간생존변수집합유지부(14), 생존구간유지부(11)의 정보를 사용해서 행해진다. 이 중복검사처리를, 제 11 도의 순도를 참조하면서 설명한다.
스텝 E2에서는, 단순블록마다 변수집합ps1에 속하는 변수간에 대해서 생존구간의 중복을 검사한다(단순블록내에만 생존구간이 있는 변수사이에서의 생존구간중복검사).
스텝 E3, E4, E5의 루프처리에 있어서, 생존구간중복생성부(16)는 제 12 도(c)에 표시한 바와 같이, 기본블록pb1이 기본블록bs1에 속하는지 아닌지를 판정하고, 기본블록bb1의 기본블록내 변수집합bs1에 속하는 변수v1의 생존구간이 단순블록pb1에 존재하느지 아닌지를 판정해서 (스텝E4), 또 제 12 도(d)에 표시한 바와 같이, 단순블록내변수집합ps1에 속하는 변수와, 변수v1의 사이에서 생존구간의 중복을 검사한다(스텝E5, 이것은 단순블록내에만 생존구간이 있는 변수와, 기본블록내에만 생존구간이 있는 변수에서의 생존구간중복검사가 된다). 이 스텝E4, E5의 처리를, 생존구간중복생성부(16)는, 기본블록bb1의 기본블록마다 변수집합bs1에 속하는 모든 변수에 대해서 반복한다(스텝E3).
스텝E6, E7의 루프처리에 있어서, 생존구간중복검사부(16)는, 단순블록내변수집합 ps1에 속하는 변수와, 기본블록간생존변수집합유지부(14)에 유지되고 있는 변수v2에서, 생존구간의 중복을 검사한다(스텝E7). 스텝E7의 처리를, 모든 기본블록간생존변수집합유지부(14)에 유지되고 있는 나머지 모든 변수 v2에 대해서 반복한다(스텝E6).
스텝E1에 있어서 생존구간생성부(16)는, 스텝E2로부터 E7까지의 처리가 단순블록내생존변수집합유지부(12)에 있는 단순블록pb1의 단순블록마다 변수집합ps1의 모든 변수에 대해서 행했는지 아닌지를 판정하고, 처리완료이면, 스텝E8로부터 E12까지의 처리를 행한다.
스텝E8에 있어서 생존구간중복검사부(16)는, 기본블록내생존변수집합유지부(13)에 있는 모든 기본블록bb2의 기본블록내변수집합bs2에 대해서 스텝E9로부터 E11을 행한다.
스텝E9에 있어서 생존구간중복검사부(16)는 기본블록내변수집합bs2에 속하는 변수에 대해서의 생존구간중복을 검사한다.
스텝E10, E11에서는 기본블록내변수집합bs2에 속하는 변수v와, 기본블록간변수집합에 속하는 변수v3과의 사이에서 생존구간의 중복을 검사하고(스텝E11), 기본블록간생존변수집합유지부(14)에 유지되고 있는 변수v3중, 기본블록bb2내에 생존구간이 존재하는 것의 전부에 대해서, 스텝 E11의 검사를 반복한다(스텝E10).
스텝E12에서는, 기본블록간생존변수집합유지부(14)에 있는 변수사이에 대해서 생존구간의 중복을 검사한다.
이상과 같이 생존구간중복검사부(16)가, 검사처리를 행하면, 생존구간의 중복이 검사된다. 제 20 도의 프로그램예에 대해서의 검사결과를 제 22 도에 표시한다.
이상과 같이 구성되는 본 실시예의 자원할당장치에 있어서의 구체적인 동작을 제 14 도로부터 제 20 도를 사용해서 설명한다.
제 14 도는 C언어기술의 프로그램의 일부분의 일예이다. 본 도면에 있어서, 변수 p1, p2, p3의 정의는, 프로그램예의 1행째보다 이전에 있는 것으로 하고, 4행째이후는 사용이 없는 것으로 한다. 또 변수s의 참조가, 이 예의 뒤에 존재한다고 한다.
제 15 도는 제 14 도의 소스프로그램에 대한 구문해석장치(1)의 출력인 중간언어프로그램이다. 이 중간언어프로그램은 2 번지형식의 것으로 주어진다.
제 15 도의 중간언어프로그램에 대해서 제어플로해석부(5)가 기본블록화를 행하고, 제 16 도에 표시한 기본블록이 생성된다. 제 16 도에 있어서, 중간언어스텝s1로부터 s11까지가 기본블록B1, 중간언어스텝s12로부터 s15까지가 기본블록B2, 중간언어스텝s16으로부터 s18까지가 기본블록B3이다.
제 16 도에 표시한 기본블록화후의 중간언어프로그램에 대해서, 데이터플로해석부(6)가 데이터플로해석을 행하면, 제 17 도에 표시한 생존변수에 관한 정보, 정의- 참조정보, 및 참조-정의정보가 구해진다.
단순블록생성부(8)가, 단순블록생성처리의 순서에 의해, 제 16 도중의 기본블록B1을 단순블록으로 분할하는 과정을 제 19 도에 표시한다.
먼저 단순블록생성부(8)는 제 19 도(a)에 표시한 바와 같이, 기본블록B1을, 중간언어스텝을 1개만 포함하는 단순블록으로 분할한다(단순블록생성처리의 스텝A1)
단순블록생성부(8)가 제 3 도에 표시한 순서도의 스텝 A2로부터 스텝A12까지의 처리를 행하고, 소블록PB1에 포함되고 있는 중간언어스텝s1을 소블록PB2의 선두에 이동한다.
상세하게는, 단순블록생성부(8)는, 소블록PB1을 꺼내고(단순블록생성처리의 스텝A2), 소블록PB1이 기본블록B1의 최후의 소블록이 아닌 것을 검출하고(단순블록생성처리의 스텝A3), 소블록PB1의 최후의 중간언어스텝s1을 검출한다(단순블록생성처리의 스텝A4). 다음에, 중간언어스텝s1에서 정의되는 변수가 변수 t1의 단 1개인 것을 검출하고(단순블록생성처리의 스텝 A5), 변수t1의 참조가 1회이고, 기본블록B1내에 있는 것을 정의-참조정보로부터 검출한다(단순블록생성처리의 스텝A6,A7), 다음에, 정의s1의 다음의 중간언어스텝으로부터 변수t1의 참조까지 변수t1의 정의가 없는 것을 검출하고, 정의 s1에서 참조되는 변수 p1, p2의 정의가, 정의 s1의 다음의 중간언어스텝으로부터 변수t1의 참조까지에 없는 것을 검출하고, 변수 t1의 참조가 속하는 소블록PB2를 검출한다(단순블록생성처리의 스텝A10). 그리고, 소블록PB2의 선두에 소블록PB1의 요소인 정의 s1을 삽입한다(단순블록생성처리의 스텝 A11).
마찬가지로, 제 19 도(a)의 소블록PB2에 속하는 중간언어스텝s1, s2를, 소블록PB7의 선두에 이동한 모양을 제 19 도(c)에 표시한다. 이상의 처리를 소블록PB3, PB4,PB5,PB6의 순으로 반복하면, 기본블록B1의 내부는, 제 19 도(c)에 표시한 것으로부터, 제 19 도(d)에 표시한 것으로 변천한다.
계속해서, 단순블록생성부(8)가, 소블록PB7의 최후의 중간언어스텝s7에서 정의되는 변수x와, 소블록PB8의 최후의 중간언어스텝s8에서 정의되는 변수 y를 이동하려고하나, 이들 변수 x, y는 참조횟수가 2회이므로 소블록PB7, PB8의 이동을 행하지 않는다고 판정한다(단순블록생성처리의 스텝A7). 마찬가지로 소블록PB9를 이동하려고 하나, 소블록PB9는, 최후의 정의 s9에서 정의되는 변수 z의 참조가 기본블록B2에 존재하기 때문에, 이동을 행하지 않는다고 판정한다(단순블록생성처리 스텝A6). 소블록PB10은 최후의 중간언어스텝s10에서 정의되는 변수 a 가 기본블록 B2에서 참조되므로 이동을 행하지 않는다고 판정하고(단순블록생성처리의 스텝 A6), 소블록PB11은 기본블록B1의 최후의 소블록이므로 이동을 행하지 않는다고 판정한다(단순블록생성처리의 스텝A3), 결국, 기본블록B1의 단순블록화는 제 19 도(d)에 표시한 상태에 머문다.
단순블록생성부(8)가, 단순블록화를 기본블록 B2, B3에 대해서도 행한 모양을 제 20 도에 표시한다.
단순블록생성부(8)에 의한 단순블록형성후, 생존구간생성부(15)가, 생존구간의 표현을 행하고, 또한 각 변수를 3개의 집합으로 분류한다.
이 모양을, 대표적인 변수t1, y, a, b를 일예로 해서 설명한다.
먼저 변수t1에 대해서 설명한다.
1) 생존구간생성부(15)에 의해서, 마크완료가 아닌 중간언어스텝s1이 선택된다. 생존구간생성부(15)는, 중간언어스텝s1에 마크하고, 정의마다생존구간검출처리에 옮긴다(생존구간생성처리의 스텝B1∼B5).
2) 모든 기본블록을 미탐색으로 한다(생존구간생성처리의 스텝B4).
3) 다음에 변수 t1이 LiveOut[B1]에 포함되고 있는지 검사한다. 변수 t1은 포함되고 있지 않으므로 정의마다생존구간검출처리의 스텝C3으로 옮긴다(정의마다생존구간검출처리의 스텝C2, C18).
4 ) 정의 s1의 정의- 참조정보로부터, 기본블록B1의 출구로부터 입구를 향해서 탐색을 행하고 최초에 찾는 변수 t1의 참조 s2를 찾는다(정의마다생존구간검출처리의 스텝C3).
5) 생존구간생성부(15)는, 중간언어스텝s2를 꺼내고, 이것을, 변수 t1에 대응시켜, 변수t1의 생존구간의 일부로 한다(정의마다생존구간검출처리의 스텝C4).
6) 생존구간생성부(15)는, 중간언어스텝s1과 s2는 동일한 단순블록PB8에 속하고 있으므로, 변수t1을 단순블록내생존변수집합유지부(12)의 단순블록PB7의 단순블록마다 변수집합에 격납한다(정의마다생존구간검출처리의 스텝C5).
이상에 의해, 변수t1의 생존구간이 구해지고, 또 변수 t1은, 단순블록내생존변수집합유지부(12)에 격납된다.
다음에 변수 y에 대해서 설명한다.
1) 마크완료가 아닌 중간언어스텝 s8이, 생존구간생성부(15)에 의해서 선택된다. 생존구간생성부(15)는, 중간언어스텝s8에 마크하고, 생존구간생성처리를 행한다(생존구간생성처리의 스텝B1∼B5)
2) 모든 기본블록을 미탐색으로 한다(생존구간생성처리의 스텝B4).
3) 다음에 변수 y가 LiveOut[B1]에 포함되고 있는지 검사한다. 생존구간생성부(15)는, 변수 y는 포함되어 있지 않으므로 정의마다생존구간검출처리의 스텝C3을 행한다(정의마다생존구간검출처리의 스텝C2, C18).
4) 생존구간생성부(15)는, 중간언어스텝 s8의 정의-참조정보에 의거해서, 기본블록B1의 출구로부터 입구를 향해서의 탐색을 행하고, 변수y의 참조인 중간언어스텝s10을 찾는다(정의마다 생존구간검출처리의 스텝C3).
5) 생존구간생성부(15)는, 변수y의 생존구간을, 중간언어스텝s5, s6, s9, s10까지로 한다(정의마다 생존구간검출처리의 스텝C4).
6) 생존구간생성부(15)는 중간언어스텝s8과 s10은 다른 단순블록에 속하고 있는 것을 판정하고, 변수y를, 기본블록내생존변수집합유지부(13)의 유지집합중, 기본블록B1에 대응하는 것에 격납한다(정의마다생존구간검출처리의 스텝C5).
이상의 의해 변수y의 생존구간이 구해지고, 생존구간생성부(15)는, 변수y를 기본블록내생존변수집합유지부(13)에 격납했다.
다음에 변수 a에 대해서 설명한다.
1) 먼저 마크완료가 아닌 중간언어스텝s10이, 생존구간생성부(15)에 의해서 선태된다.
생존구간생성부(15)는, 중간언어스텝s10을 마크하고, 정의마다생존구간검출처리에 옮긴다(생존구간생성처리스텝B1∼B5).
2) 생존구간생성부(15)는, 모든 기본블록을 미탐색으로 한다(생존구간생성처리스텝B4).
3) 다음에 생존구간생성부(15)는, 변수 a가 LiveOut[B1]에 포함되고 있고, 중간언어스텝s11에는 변수 a의 정의가 없는 것을 판정해서, 변수a를 기본블록간 생존변수집합유지부(14)에 격납하고, 정의마다생존구간검출처리스텝C9에 옮긴다(정의마다생존구간검출처리스텝 C2, C18,C8).
4) 생존구간생성부(15)는 중간언어스텝s11을 변수 a의 생존구간으로 한다(정의마다생존구간검출처리스텝C9).
5) 생존구간생성부(15)는, 기본블록B2가 탐색완료이고, 변수a가 LiveIn[B2]에 속하고 있는 것을 판정하고, 기본블록B2와 중간언어스텝s10에 관해서 후속블록생존구간검출처리를 행한다(정의마다생존구간탐색처리스텝C10).
6) 생존구간생성부(15)는, 기본블록B2를 탐색완료로 한다(후속블록생존구간검출처리스텝D1).
7) 생존구간생성부(15)는, 변수a가 LiveOut[B2]에 속하는 것을 판정하고, 또, 변수a가, Def[B2]에 속하지 않는 것을 판정해서, 후속블록생존구간검출처리의 스텝D3의 처리를 행한다(후속블록생존구간검출처리스텝D2, D8).
8) 생존구간생성부(15)는, 중간언어스텝 s13, s12, s14, s15를 변수 a의 생존구간으로 한다(후속블록생존구간검출처리스텝D3).
9) 기본블록B2의 후속기본블록B3이 탐색완료가 아니고, 또한 LiveIn[B3]에 변수 a가 속하고 있는 것을 판정하고, 기본블록B3과 정의 s10에 관해서, 후속블록생존구간검출처리를 행한다(후속블록생존구간검출처리스텝D4).
10) 생존구간생성부(15)는, 기본블록B3을 탐색완료한다(후속블록생존구간검출처리스텝D1).
11) 생존구간생성부(15)는, 변수 a가 LiveOut[B3]에 속하지 않는 것을 판정하고, 후속블록생존구간검출처리의 스텝 D5를 행한다(후속블록생존구간검출처리스텝D2).
12) 생존구간생성부(15)는, 기본블록B3의 출구로부터 입구를 향해서 탐색을 행하고, 변수a의 참조s16을 찾아낸다(후속블록생존구간검출처리스텝D5).
13) 참조s16을 변수 a의 생존구간으로 한다(후속블록생존구간검출처리스텝D6).
14) 후속블록생존구간검출처리를 종료하고, 앞의 9)의 상태로 복귀한다((후속블록생존구간검출처리스텝D7).
15) 기본블록B2에 관해서 후속블록생존구간검출처리를 종료하고, 앞의 5)의 상태로 복귀한다(후속블록생존구간검출처리스텝D7).
16) 생존구간생성부(15)는, 중간언어스텝s10의 정의-참조정의를 참조하고, 본 정보내에 존재하는 변수 a의 참조s12를 꺼낸다. 또 참조s12의 참조-정의정보를 참조하고, 참조s12에 도달하는 변수a의 정의s10을 꺼낸다. 단 참조s10은 마크완료이므로, 생존구간생성부(15)는, 후속블록생존구간검출처리스텝C10, C11을 행하지 않는다.
17) 정의마다 생존구간검출처리를 종료해서, 1)의 상태로 복귀한다. 이상에 의해 변수 a의 생존구간이 구해지고, 변수a를 기본블록간생존변수집합유지부(14)에 격납한다.
다음에 변수 b에 대해서 설명한다.
1) 생존구간생성부(15)는, 마크완료가 아닌 중간언어스텝s11을 선택하고, 중간언어스텝s11을 마크해서, 생존구간생성처리를 행한다(생존구간생성처리스텝 B1∼B5).
2) 생존구간생성부(15)는, 모든 기본블록을 미탐색으로 한다(생존구간생성처리스텝B4).
3) 생존구간생성부(15)는, 변수b가 LiveOut[B1]에 포함되고 있고, 정의 s11자체가 B1의 최후의 중간언어스텝인 것을 판정해서, 변수b를 기본블록간생존변수집합유지부(14)에 격납한다. 격납후, 정의마다 생존구간검출처리스텝C6을 행한다(정의마다생존구간검출처리스텝C2, C18,C8).
4) 생존구간생성부(15)는, 중간언어스텝s11이, 기본블록B1의 최후의 중간언어스텝인 것을 판정하고, 변수b의 생존구간에 아무것도 격납하지 않는다(정의마다생존구간검출처리스텝C9).
5) 생존구간생성부(15)는 변수b가 LiveIn[B2]에 속하고 있는 것을 판정하고, 기본블록B2와 중간언어스텝s11에 관해서 후속블록생존구간검출처리를 행한다(정의마다생존구간검출처리스텝C7).
6) 생존구간생성부(15)는, 기본블록B2를 탐색완료로 한다(후속블록생존구간검출처리스텝D1).
7) 생존구간생성부(15)는, 변수b가 Def[B2]에 속하는 것을 판정하고, 후속블록생존구간검출처리의 스텝 D5를 행한다(후속블록생존구간검출처리스텝D2).
8) 생존구간생성부(15)는 중간언어스텝s11의 정의-참조정보를 참조하고, 기본블록B2의 출구로부터 입구를 향해서 탐색을 행하고, 최초에 찾는 변수 b의 참조s13을 찾아낸다(후속블록생존구간검출처리스텝D5).
9) 생존구간생성부(15)는, 중간언어스텝s13을 변수b로 생존구간으로 한다(후속블록생존구간검출처리스텝D6).
10) 후속블록생존구간검출처리를 종료하고, 앞의 5)의 상태로 복귀한다.
11) 변수b의 참조 s13에 대해서, 생존구간생성부(15)는, 스텝C11∼C16을 행한다 (정의마다생존구간검출처리스텝C11).
12) 생존구간생성부(15)는 참조s13 참조-정의정보에 존재하는 변수b의 정의중, 마크완료가 아닌 정의 s13을 찾아낸다(정의마다생존구간검출처리스텝C12).
13) 생존구간생성부(15)는 참조s13을 마크하고, 정의마다 생존구간검출처리에 옮긴다(정의마다생존구간검출처리스텝C13,C14).
14) 생존구간생성부(15)는, 변수b가 LiveOut[B2]에 포함되어 있고, 기본블록B2의 최후까지 변수b의 정의가 없는 것을 판정하고, 정의마다생존구간검출처리스텝C9에 옮긴다(정의마다생존구간검출처리스텝C2, C18, C8).
15) 생존구간생성부(15)는 중간언어스텝 s12, s14, s15를 변수b의 생존구간으로 한다(정의마다생존구간검출처리스텝C9).
16) 생존구간생성부(15)는 변수b가 LiveIn[B3]에 속하고 있는 것을 판정하고, 기본블록B3이 미탐색이고, 기본블록B3과 중간언어스텝s13에 관해서 후속블록생존구간검출처리를 행한다(정의마다생존구간검출처리스텝C10).
17) 생존구간생성부(15)는, 기본블록B3을 탐색완료로 한다(후속블록생존구간검출처리스텝 D1).
18) 생존구간생성부(15)는, 변수b가 LiveOut[B3]에 속하지 않는 것을 판정하고, 후속블록생존구간검출처리스텝D5에 옮긴다(후속블록생존구간검출처리스텝 D2)
19) 생존구간생성부(15)는, 기본블록B3의 출구로부터 입구를 향해서 탐색을 행하고, 정의s13의 정의-참조정보에 존재하는 변수b의 참조s17을 찾는다(후속블록생존구간검출처리스텝 D5).
20) 생존구간생성부(15)는, 중간언어스텝s16, s17을 변수 b의 생존구간으로 한다(후속블록생존구간검출처리스텝 D6).
21) 후속블록생존구간검출처리를 종료하고, 앞의 16)의 상태로 복귀한다(후속블록생존구간검출처리스텝 D7).
22) 생존구간생성부(15)는, 정의s13의 정의-참조정보에 존재하는 참조s13, s14, s17을 꺼낸다. 참조 s14, s17의 참조-정의정보에 존재하는 변수 b의 정의 s13뿐이고, 이 정의 s13은 마크완료이다. 또, 참조s13의 참조-정의정보에 존재하는 변수b의 정의 s11, s13은 모두 마크완료이므로, 정의마다 생존구간검출처리를 종료하고, 앞의 13)의 상태로 복귀한다(정의마다생존구간검출처리스텝C11∼C16).
23) 생존구간생성부(15)는, 또 참조s13의 참조-정의정보에 존재하나, 정의 s11은 마크완료이므로, 생존구간생성부(15)는 정의마다 생존구간검출처리를 종료하고, 앞의 1)의 상태로 복귀한다. 이상에 의해 변수 b의 생존구간이 구해지고, 변수b를 기본블록간생존변수집합유지부(14)에 격납한다.
마찬가지로해서 다른 변수에 대해서도, 생존구간생성부(15)의 생존구간검출처리를 행하면 제 21 도와 같이 된다.
다음에, 제 9 도에 생존구간중복검사처리에 의해서, 복수의 중복이 검사되는 과정을 표시한다.
먼저, 생존구간중복검사부(16)는, 단순블록내에만 생존구간이 존재하는 변수에 대해서 중복검사를 행한다. 예를들면, 동일한 단순블록PB8에만 존재하는 변수t3과, 변수y4의 생존구간의 중복검사를 행하고, 변수t3과 변수y4는 생존구간이 겹치지 않는다고 검사결과를 내린다(생존구간중복검사처리스텝E2).
다음에 생존구간중복검사부(16)는, 단순블록내에만 생존구간이 존재하는 변수와, 기본블록내에만 생존구간이 존재하는 변수와의 생존구간의 중복검사를 행한다. 예를들면, 기본블록B1내에만 생존구간이 존재하는 변수y와, 단순블록PB9, PB10내에만 생존구간이 존재하는 변수와의 중복검사를 행하고, 변수 t5, z4는, 생존구간이 겹친다고 검사결과를 내린다(생존구간중복검사처리스텝E3∼E5).
다음에 생존구간중복검사부(16)는, 단순블록내에만 생존구간이 존재하는 변수와, 기본블록간에 걸쳐서 생존구간이 존재하는 변수와의 중복검사를 행한다. 예를들면 기본블록B2에 생존구간이 존재하는 변수 a와, 단순블록PB15에만 생존구간이 존재하는 변수c와의 중복검사를 행하고, 중복한다는 검사결과를 내린다(생존구간중복검사처리스텝E6,E7).
다음에 생존구간중복검사부(16)는, 기본블록내에만 생존구간이 존재하는 변수간의 중복검사를 행한다. 예를들면, 생존구간중복검사부(6)는, 기본블록B1내에만 생존구간이 존재하는 변수x,y에 대해서 중복검사를 행하고, 변수x,y는 생존구간이 중복하는 것을 검출한다(생존구간중복검사처리스텝E9).
다음에, 생존구간중복검사부(16)는, 기본블록내에만 생존구간이 존재하는 변수와, 기본블록간에 걸쳐서 생존구간이 존재하는 변수와의 중복검사를 행한다. 예를들면 기본블록B2에 생존구간이 존재하는 변수 a와, 단순블록PB15내에만 생존구간이 존재하는 변수c와의 중복검사를 행하고, 중복한다는 검사결과를 내린다(생존구간중복검사처리스텝E6, E7).
다음에 생존구간중복검사부(16)는, 기본블록내에만 생존구간이 존재하는 변수간의 중복검사를 행한다. 예를들면, 생존구간중복검사부(16)는, 기본블록B1내에만 생존구간이 존재하는 변수 x,y에 대해서 중복검사를 행하고, 변수 x,y는 생존구간이 중복하는 것을 검출한다(생존구간중복검사처리스텝E9).
다음에, 생존구간중복검사부(16)는, 기본블록내에만 생존구간이 존재하는 변수와, 기본블록간에 걸쳐서 생존구간이 존재하는 변수와의 중복검사를 행한다. 예를들면, 생존구간중복검사부(16)는, 기본블록B1에 생존구간이 존재하는 변수a와, B1내에만 생존구간이 존재하는 변수x,y와의 중복검사를 행하고, 변수x, y는, x와는 생존구간이 겹치는 것이 검출되고, y는 생존구간이 겹치지 않는 것이 검출된다(생존구간중복검사처리스텝E10, E11).
다음에, 생존구간중복검사처리스텝 E12에 의해 생존구간중복검사부(16)는, 기본블록간에 걸쳐서 생존구간이 존재하는 변수간에서의 생존구간의 중복검사를 행한다. 예를들면, 생존구간중복검사부(16)는, 변수a와 변수b와의 중복검사를 행하고, 생존구간이 겹친다고 검사결과를 내린다.
이상 설명해온 바와같이 제 1 발명에 관한 컴파일러에 의하면, 기본블록내에만 생존구간이 들어가는 변수중, 다른 기본블록내에 속하는 것끼리의 중복판정처리가 결과로서 생략되므로, 생존구간의 중복판정처리가 낭비가 없는 것이 되고, 컴파일시간을 단축할 수 있다.
또, 제 2 발명에 관한 컴파일러에 의하면, 프로그램중의 대다수의 변수가 단순블록내에 수납된다. 생존구간의 중복판정처리는, 동일한 단순블록에 수납된 것끼리 행해지기 때문에, 생존구간의 중복판정처리가 매우 낭비가 없는 것이되고. 중복판정에 요하는 처리시간을 크게 단축할 수 있다.
구체적으로는, n개의 변수에 대해서, nC2회 행해진 생존구간의 중복판정처리의 처리시간은 간략화에 의해서 약1/10이 된다.
또, 제 3 발명에 관한 컴파일러에 의하면, 생존구간이 단순블록내에 속하는지 속하지 않는지에 의해서, 생존구간의 중복판정처리를 개별화하므로, 용장부의 중복판정처리가 철저하게 생략된다.
또, 제 4 발명에 관한 컴파일러에 의하면, 기본블록중의 각 정의명령에 대해서 통합가능한지 아닌지를 판정하므로, 원래의 프로그램의 데이터의존관계를 손상하지 않고 프로그램중에 단순블록을 형성할 수 있다.
또 제 5 발명에 관한 컴파일러에 의하면, 기본블록내에만 생존구간이 존재하는 변수의 생존구간을, 단순한 알고리듬에 의해서 검출할 수 있다. 단순블록형성을 위하여 처리량이 증가하고, 컴파일처리의 고속성이 저하를 초래하는 일은 없다.
또, 제 6 발명에 관한 컴파일러에 의하면, 기본블록내에만 생존구간이 존재하는 변수의 생존구간을, 단순한 알고리듬에 의해서 표현할 수 있다.
또, 제 7 발명에 관한 컴파일러에 의하면, 기본블록간에 생존구간이 존재하는 변수의 생존구간을, 단순한 알고리듬에 의해서 표현할 수 있다.
또, 제 8 발명에 관한 컴파일러에 의하면, 분기처리내에서 값이 설정되는 변수의 생존구간을, 단순한 알고리듬에 의해서 표현할 수 있다.
또, 제 9 발명에 관한 컴파일러에 의하면, 분기처리내에서 값이 사용되는 변수의 생존구간을, 단순한 알고리듬에 의해서 표현할 수 있다.

Claims (9)

  1. 복수의 명령으로 이루어진 프로그램을, 기계어프로그램으로 번역하는 컴파일러에 있어서, 상기 프로그램중의 점프명령과, 당해 점프명령의 점프장소의 명령을 검출하는 점프검출수단과, 점프검출수단이 검출한 명령에 의거해서, 상기 프로그램 기본블록으로 분할하는 분할수단과, 프로그램중의 각 변수에 대해서, 변수의 설정치가 유효하게 되는 프로그램중의 구간인 생존구간을 검출하고, 검출결과를, 생존구간내에 포함되는 명령의 위치를 표시하는 명령위치정보의 집합으로 표시하는 생존구간검출수단과, 생존구간검출수단이 검출한 생존구간이 1개의 기본블록내에 들어가는 변수를 전부검출하고, 검출결과를 당해 기본블록에 대응시킨 기본블록내 생존변수집합으로 표시하는 기본블록내생존변수검출수단과, 생존구간검출수단이 검출한 생존구간이, 복수의 기본블록간에 미치는 변수를 전부 검출하고, 검출결과를, 기본블록간생존변수집합으로 표시하는 기본블록간생존변수검출수단과, 기본블록간생존변수집합으로부터 변수를 2개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 1 생존구간중복판정수단과, 동일한 기본블록에 대응된 기본블록내생존변수집합으로부터 변수를 2개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 2 생존구간중복판정수단과, 상기 기본블록에 대응된 기본블록내생존변수집합과, 기본블록간생존변수로부터 변수를 1개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 3 생존구간중복판정수단과, 상기 제 1, 제 2, 제 3 생존구간중복판정수단의 판정결과를 사용해서 자원할당을 행하는 것을 특징으로 하는 컴파일러.
  2. 제1항에 있어서, 상기 컴파일러는 또, 변수의 값을 설정하는 명령인 정의명령과, 당해 정의명령에 의해서 설정된 변수의 값을 사용하는 명령인 참조명령이, 적어도 1 조순으로 배열되는 명령열인단수블록을 기본블록내에 형성하는 단순블록형성수단과, 상기 기본블록내 생존변수집합으로부터 생존구간이 1개의 단순블록내에 들어가는 변수를 전부 검출하고, 검출결과를, 당해 단순블록에 대응시킨 단순블록내생존변수집합으로 표시하는 단순블록내생존변수검출수단과, 상기 기본블록내생존변수집합으로부터 생존구간이 복수의 단순블록간에 미치는 변수를 검출하고, 검출결과를, 단순블록간생존변수집합으로 표시하는 단순블록간생존변수검출수단을 구비하고, 상기 제 2 생존구간중복판정수단은, 상기 단순블록간 생존변수집합으로부터 변수를 2개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 1 생존구간중복판정부와, 동일한 단순블록에 대응된 단순블록내 변수집합으로부터 변수를 2개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 2 생존구간중복판정부와, 상기 단순블록에 대응된 단순블록내 변수집합과, 단순블록간 생존변수집합으로부터 변수를 1개씩 꺼내고, 당해 2 변수의 생존 구간에 대응하는 명령위치정보집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 3 생존구간중복 판정부를 구비한 것을 특징으로 하는 컴파일러.
  3. 제2항에 있어서, 상기 제 3 생존구간중복판정수단은, 기본블록간생존변수집합과, 상기 단순블록에 대응된 단순블록내생존변수집합으로부터 변수를 1 개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 4 생존구간중복판정부와, 기본블록생존변수집합과 단순블록간 생존변수집합으로부터 변수를 1개씩 꺼내고, 당해 2 변수의 생존구간에 대응하는 명령위치집합의 집합곱을 산출함으로써, 생존구간의 중복을 판정하는 제 5 생존구간중복판정부를 구비한 것을 특징으로 하는 컴파일러.
  4. 제2항 또는 제3항에 있어서, 상기 단순블록형성수단은, 기본블록으로부터 정의명령을 1개씩 꺼내는 정의명령꺼내기수단과, 정의명령꺼내기수단이 꺼낸 정의명령이 포함되는 기본블록으로부터, 그 정의명령에 대응하는 참조명령을 검출하는 대응참조명령검출수단과, 대응참조명령검출수단이 검출한 참조명령의 위치에 당해 참조명령에 대응하는 정의명령이 이동가능한지 아닌지를 판정하는 정의명령이동가부판정수단과, 정의명령이동가부판정수단이 가능하다고 판정한 경우, 정의명령이동가부판정수단이 가능하다고 판정한 정의명령을, 당해 정의명령에 대응하는 참조명령의 직전에 이동하고, 당해 정의명령 및 참조명령을 1 개의 단순블록에 통합하는 정의명령이동수단과, 정의명령이동수단이 이동한 정의명령이 이동전에 있어서, 단순블록내의 최후의 명령인 경우, 이동전의 단순블록의 나머지 명령의 전부를 당해 정의명령의 이동장소의 직전에 이동하고, 이동한 나머지명령을, 이동장소의 단순블록에 통합하는 단순블록나머지명령이동수단을 구비한 것을 특징으로 하는 컴파일러.
  5. 제4항에 있어서, 상기 정의명령이동가부판정수단은, 상기 정의명령꺼내기수단이 꺼낸 정의명령에 의해서 값이 설정되는 변수가 1개인지 아닌지를 판정하는 변수단복판정부와, 상기 변수단복판정부가 1 개라고 판정한 경우, 상기 대응참조명령검출수단이 검출한 참조명령이 1 개인지 아닌지를 판정하는 참조명령단복판정부와, 상기 참조명령단복판정부가 1 개라고 판정한 경우, 당해 참조명령에 대응하는 정의명령에 의해서 값이 설정되는 변수가, 당해 정의명령으로부터 당해 참조명령까지의 구간에 있어서 재설정되는지 아닌지를 판정하는 제 1 설정유무판정부와, 상기 제 1 재설정유무판정부가 재설정이 없다고 판정한 경우, 당해 정의명령에 있어서 사용되는 변수를 검출하는 정의명령내 사용변수검출부와, 상기 정의명령내사용변수검출부가 검출한 변수가, 당해 정의명령으로부터 당해 참조명령까지의 사이에, 재설정되지 않는 것을 판정하는 제 2 재설정유무판정부와, 상기 제 2 재설정유무판정부가 재설정이 없다고 판정한 경우, 당해 정의명령이 당해참조명령의 위치에 이동가능하다고 판정한 이동가부판정부로 이루어진 것을 특징으로 하는 컴파일러.
  6. 제1항∼제5항의 어느 한 항에 있어서, 상기 컴파일러는 또, 상기 프로그램중의 각 기본블록과, 당해기본블록의 입구에 있어서 유효하게 되는 변수 및 출구에 있어서 유효하게 되는 변수를 대응시켜서 기억하는 유효변수정보기억수단을 구비하고, 상기 생존구간검출수단은, 상기 프로그램으로부터 정의명령을 1 개씩 꺼내는 정의명령꺼내기부와, 상기 정의명령꺼내기부에 의해서 꺼내진 정의명령을 포함한 기본블록과, 당해 정의명령에 의해서 설정되는 변수를 검출하고, 검출한 변수의 설정치가 당해 기본블록의 출구에서 무효인지 아닌지를, 상기 유효변수정보기억수단의 기억내용에 의거해서 판정하는 출구무효판정부와, 상기 출구무효판정부가 설정치무효라고 판정한 경우, 당해 기본블록으로부터, 당해 정의명령에 대응하는 참조명령으로서, 당해 기본블록의 출구에 가장 가까운 것을 검출하는 출구최근참조명령검출부와, 당해정의명령의 다음 명령으로부터 출구최근참조명령검출부가 검출한 참조명령까지의 명령위치정보를 전부 검출하는 기본블록내명령위치검출부와, 명령위치정보가 검출된 변수에 대해서의 생존 구간을, 기본블록내명령위치검출부가 검출한 명령위치정보의 집합으로 표시하는 기본블록내생존구간표현부를 구비하고, 상기 기본블록내생존변수검출수단은, 상기 기본블록내생존구간표현부가 생존구간을 표현한 변수를, 당해 포함되는 기본블록에 대응하는 기본블록내생존변수집합의 멤버로 하는 것을 특징으로 하는 컴파일러.
  7. 제6항에 있어서, 상기 컴파일러는, 또, 기본블록과, 당해 기본블록에 있어서 설정되는 변수를 대응시켜서 기억하는 기본블록내정의정보기억수단을 구비하고, 상기 생존구간검출수단은, 상기 출구무효판정부가 유효하다고 판정한 경우, 상기 기본블록내정의정보기억수단의 기억내용에 의거해서, 상기 출구무효판정부에 의해서 유효하다고 판정된 정의명령에 있어서 설정되는 변수가, 당해 정의명령으로부터 당해 정의명령을 포함한 기본블록의 출구까지의 사이에 재설정되는지 아닌지를 판정하는 재설정유무판정부가, 상기 재설정유무판정부가 재설정없다고 판정한 경우, 당해 정의명령의 다음의 명령으로부터 당해 기본블록의 출구까지의 명령위치정보를 검출하는 출구유효시위치정보검출부와, 상기 재설정유무판정부가 재설정없다고 판정한 경우, 상기 유효변수정보기억수단 및 기본블록내정의정보기억수단의 기억내용에 의거해서, 당해 정의명령이 포함되는 기본블록의 다음순서의 기본블록중, 당해변수가 그 입구 및 출구에서 유효하고, 또한 그 내부에서 당해변수가 재설정되지 않는 것을 전부 검출하는 생존기본블록검출부와, 상기 기본블록내 정의정보기억수단의 기억내용에 의거해서, 상기 생존기본블록검출부가 검출한 기본블록내에 포함되는 명령위치정보를 전부 검출하는 기본블록간위치정보검출부와, 상기 재설정유무판정부가 재설정없다고 판정한 경우, 당해 정의명령이 포함되는 기본블록의 다음순서의 기본블록중, 그 입구에서 당해변수의 값이 유효하고 그 출구에서 무효한 기본블록을 검출하는 말미기본블록검출부와, 상기 말미기본블록검출부가 검출한 기본블록으로부터, 당해 정의명령에 대응하는 최후의 참조명령을 검출하는 말미참조명령검출부와, 상기 말미기본블록감출부가 검출한 기본블록의 입구로부터 상기 말미참조명령검출부가 검출한 참조명령까지의 명령위치정보를 전부 검출하는 입구유효시위치정보검출부와, 상기 재설정유무판정부가 재설정없다고 판정한 변수에 대응하는 생존구간의 집합을, 출구유효시위치정보검출수단의 검출결과와, 입구유효시위치정보검출수단의 검출결과, 기본블록간위치정보검출수단의 검출결과를 합한 집합으로 표시하는 기본블록간 생존구간표현부를 구비하고, 상기 기본블록간생존변수검출수단은, 상기 재설정유무판정부가 재설정없다고 판정한 변수를, 기본블록간생존변수집합의 멤버를 하는 것을 특징으로 하는 컴파일러.
  8. 제7항에 있어서, 상기 컴파일러는, 프로그램중의 각 명령위치와, 당해 명령위치의 명령에 있어서 사용되는 변수와, 당해 변수가 설정되는 명령의 명령위치정보를 대응시켜서 기억하는 참조-정의 정보기억수단을 구비하고, 상기 생존구간검출수단은, 상기 정의명령꺼내기부가 꺼낸 정의명령의 위치에 식별정보를 붙이는 마킹부와, 상기 정의명령꺼내기부가 꺼낸 정의명령에 대응하는 참조명령에서 사용되는 변수를 검출하는 참조변수검출부와, 참조-정의정보기억수단의 기억내용에 의거해서, 상기 참조변수검출부가 검출한 변수에 설정치를 설정하는 정의명령을 전부 검출하는 정의명령검출부와, 상기 정의명령검출부가 검출한 정의명령중, 상기 마킹부에 의해서 붙여진 식별정보가 없는 것을 검출하는 무마크정의명령검출부와, 상기 무마크정의명령검출부가 검출한 정의명령의 다음의 명령으로부터, 그 정의명령을 포함한 기본블록의 출구까지의 명령위치정보를 전부검출하는 제 1 분기블록내위치정보검출부와, 상기 기본블록간생존구간표현부가 표시한 명령위치정보의 집합에, 상기 제 1분기블록내위치정보검출부가 검출한 명령위치정보를 부가하는 제 1 명령위치정보부가부를 구비한 것을 특징으로 하는 컴파일러.
  9. 제8항에 있어서, 상기 컴파일러는 또 프로그램중의 각 명령위치와, 당해 명령위치의 명령에 있어서 설정되는 변수와, 당해변수가 사용되는 명령의 명령위치정보를 대응시켜서 기억하는 정의-참조정보기억수단을 구비하고, 상기 생존구간검출수단은 상기 정의-참조정보기억수단의 기억내용에 의거해서, 상기 무마크정의명령검출부가 검출한 정의명령에 대응하는 참조명령을 검출하는 분기블록내참조명령검출부와, 상기 분기블록내참조명령검출부가 검출한 참조명령을 포함한 기본블록을 검출하는 분기블록검출부와, 상기 블록검출부가 검출한 기본블록의 입구로부터, 상기 분기블록내참조명령검출부가 검출한 참조명령까지의 명령위치정보를 전부검출하는 제 2 분기블록내위치정보검출부와, 상기 기본블록간 생존구간표현부가 표시한 명령위치정보의 집합에, 상기 제 2 분기블록내위치정보검출부가 검출한 명령위치정보를 부가하는 제 2 명령위치정보부가부를 구비한 것을 특징으로 하는 컴파일러.
KR1019950029734A 1994-09-13 1995-09-13 컴파일러 KR100226233B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP21881194A JP3606387B2 (ja) 1994-09-13 1994-09-13 コンパイル装置
JP94-218811 1994-09-13

Publications (2)

Publication Number Publication Date
KR960011768A KR960011768A (ko) 1996-04-20
KR100226233B1 true KR100226233B1 (ko) 1999-10-15

Family

ID=16725719

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019950029734A KR100226233B1 (ko) 1994-09-13 1995-09-13 컴파일러

Country Status (6)

Country Link
US (1) US5642512A (ko)
EP (1) EP0702293B1 (ko)
JP (1) JP3606387B2 (ko)
KR (1) KR100226233B1 (ko)
CN (1) CN1097226C (ko)
DE (1) DE69524511T2 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1149476C (zh) * 1995-03-16 2004-05-12 松下电器产业株式会社 资源分配装置
JP3060907B2 (ja) * 1995-07-28 2000-07-10 日本電気株式会社 言語処理プログラムの処理方式
US5787287A (en) * 1995-12-27 1998-07-28 Intel Corporation Representation of control flow and data dependence for machine
TW470915B (en) * 1996-03-12 2002-01-01 Matsushita Electric Ind Co Ltd Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
US5778233A (en) * 1996-10-11 1998-07-07 International Business Machines Corporation Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
US5946492A (en) * 1997-02-19 1999-08-31 International Business Machines Corporation Compiler that reduces call stack size through identification of stackless variables
JPH11327879A (ja) * 1998-05-15 1999-11-30 Fujitsu Ltd 変数検索装置及び方法並びに変数検索プログラムを記録したコンピュータ読取り可能な記録媒体
US6421824B1 (en) * 1999-04-23 2002-07-16 Sun Microsystems, Inc. Method and apparatus for producing a sparse interference graph
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
US6381691B1 (en) * 1999-08-13 2002-04-30 International Business Machines Corporation Method and apparatus for reordering memory operations along multiple execution paths in a processor
CN100430896C (zh) * 2002-10-29 2008-11-05 洛克希德马丁公司 硬件解析器加速器
CN100380323C (zh) * 2003-02-28 2008-04-09 Bea系统公司 用于确定何时需要运行ejb编译器的系统和方法
US7210135B2 (en) * 2003-08-26 2007-04-24 Microsoft Corporation Data flow analysis of transactional processes
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
US7539983B2 (en) * 2005-01-14 2009-05-26 Microsoft Corporation Tool for processing software programs using modified live-ness definition
JP4778286B2 (ja) * 2005-09-28 2011-09-21 パナソニック株式会社 コンパイラ装置
US8543992B2 (en) * 2005-12-17 2013-09-24 Intel Corporation Method and apparatus for partitioning programs to balance memory latency
JP4607958B2 (ja) * 2006-01-20 2011-01-05 パナソニック株式会社 プロセッサおよびプログラム変換装置
JP2008305337A (ja) * 2007-06-11 2008-12-18 Panasonic Corp プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
EP2022601B1 (de) 2007-08-03 2013-03-20 TRUMPF Werkzeugmaschinen GmbH + Co. KG Laserbearbeitungsmaschine zum Bearbeiten von Werkstücken sowie maschinelles Verfahren zum Bearbeiten von Werkstücken mittels eines Laserstrahls
JP5058063B2 (ja) * 2008-04-30 2012-10-24 三菱電機株式会社 制御システム開発支援装置
EP3106982B1 (en) * 2015-06-18 2021-03-10 ARM Limited Determination of branch convergence in a sequence of program instructions

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4571678A (en) * 1982-11-05 1986-02-18 International Business Machines Corporation Register allocation and spilling via graph coloring
US4782444A (en) * 1985-12-17 1988-11-01 International Business Machine Corporation Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering
US5428793A (en) * 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
US5107418A (en) * 1990-06-11 1992-04-21 Supercomputer Systems Limited Partnership Method for representing scalar data dependences for an optimizing compiler
US5249295A (en) * 1990-06-20 1993-09-28 Rice University Digital computer register allocation and code spilling using interference graph coloring
US5530866A (en) * 1991-07-30 1996-06-25 Tera Computer Company Register allocation methods having upward pass for determining and propagating variable usage information and downward pass for binding; both passes utilizing interference graphs via coloring
US5355494A (en) * 1991-12-12 1994-10-11 Thinking Machines Corporation Compiler for performing incremental live variable analysis for data-parallel programs
US5418958A (en) * 1992-07-15 1995-05-23 Sun Microsystems, Inc. Register allocation by decomposing, re-connecting and coloring hierarchical program regions
US5367684A (en) * 1992-11-30 1994-11-22 Intel Corporation Register allocation using an improved register candidate usage matrix
JPH06250837A (ja) * 1993-02-25 1994-09-09 Ricoh Co Ltd スケジューリング処理方式

Also Published As

Publication number Publication date
JP3606387B2 (ja) 2005-01-05
DE69524511T2 (de) 2002-05-08
EP0702293A3 (en) 1997-05-02
CN1118899A (zh) 1996-03-20
JPH0883185A (ja) 1996-03-26
EP0702293B1 (en) 2001-12-12
CN1097226C (zh) 2002-12-25
US5642512A (en) 1997-06-24
EP0702293A2 (en) 1996-03-20
KR960011768A (ko) 1996-04-20
DE69524511D1 (de) 2002-01-24

Similar Documents

Publication Publication Date Title
KR100226233B1 (ko) 컴파일러
US6286135B1 (en) Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses
EP0643851B1 (en) Debugger program which includes correlation of computer program source code with optimized objet code
US5142681A (en) APL-to-Fortran translators
EP0171631B1 (en) A method for performing global common subexpression elimination and code motion in an optimizing compiler
EP0273130B1 (en) Reassociation process for code optimization
EP0171592B1 (en) A method operable within an optimizing compiler
US20080288915A1 (en) Determining destinations of a dynamic branch
EP0214751A2 (en) A method for vectorizing and compiling object code
EP2687981B1 (en) Automated compiler specialisation for global optimisation
US5339420A (en) Partitioning case statements for optimal execution performance
US7089545B2 (en) Detection of reduction variables in an assignment statement
US5923883A (en) Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
JP2002259134A (ja) ポストリンク・コードの最適化方法及び装置
JPH06324881A (ja) メモリデータの重なり判定機能を備えたコンパイラ装置
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
US5805893A (en) Assembly language program converter
Mendonça et al. Automatic insertion of copy annotation in data-parallel programs
Olschanowsky et al. Pir: Pmac's idiom recognizer
CN113050948B (zh) 动态库优化方法、装置、设备及存储介质
Goubault Generalized boxings, congruences and partial inlining
Autrey et al. Initial results for glacial variable analysis
JPH03184126A (ja) コンパイラおよびプログラムの命令コードの配置方法
JPH0522272B2 (ko)
JPH05204705A (ja) 未定義変数検出処理方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20040709

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee