KR100215502B1 - 최적화장치 - Google Patents

최적화장치 Download PDF

Info

Publication number
KR100215502B1
KR100215502B1 KR1019960021648A KR19960021648A KR100215502B1 KR 100215502 B1 KR100215502 B1 KR 100215502B1 KR 1019960021648 A KR1019960021648 A KR 1019960021648A KR 19960021648 A KR19960021648 A KR 19960021648A KR 100215502 B1 KR100215502 B1 KR 100215502B1
Authority
KR
South Korea
Prior art keywords
constant
variable
expression
rewriting
operand
Prior art date
Application number
KR1019960021648A
Other languages
English (en)
Other versions
KR970002621A (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 KR970002621A publication Critical patent/KR970002621A/ko
Application granted granted Critical
Publication of KR100215502B1 publication Critical patent/KR100215502B1/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/44Encoding
    • G06F8/443Optimisation

Landscapes

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

Abstract

상수보류변수의 정의와 사용정보는 상수보류 변수정의 검출유니트(7)와 사용식 검출유니트(8)에 의하여 상수보류 변수정보 유지유니트(6)내 저장되게 된다. 부분상수식 재기록 유니트(9)는 상수 보류변수로 재기록되고, 이때 변수는 상수로 재기록되며, 상수로 상승된 변수를 포함하는 식으로 나타난다.
비용판단 및 재기록유니트(10)는 변수가 레지스터내에 로우딩되거나 상수전파가 안내되는 비용에 의하여 정의되고, 상수전파가 안내되면 변수를 상수로 재기록한다. 자원 할당유니트(11)는 변수를 자원으로 할당한다. 메모리변수 재기록 유니트(12)는 메모리에 할당된 상수보류 변수를 상수값으로 재기록한다. 상수보류 변수정의 제거 유니트(13)는 불필요하게된 상수보류 변수의 정의를 제거한다.

Description

최적화(最適化) 장치
제 1a 도는 콤파일러의 구성도이다.
제 1b 도는 제 1a 도에서 나타낸 콤파일러의 구성내의 최적화장지(200)의 구성도이다.
제 2 도는 본 발명의 실시예내의 상수 최적화장치(60)의 내부구성도이다.
제 3 도는 부분상수식 재기록 유니트(9)의 처리를 나타내는 플로우챠트이다.
제 4a 도는 비용판단및 재기록 유니트(10)의 구성도이다.
제 4b 도는 메모리 변수 재기록유니트(12)의 구성도이다.
제 5 도는 비용유지 유니트(15)내에 유지된 내용의 예를 나타내는 도면이다.
제 6a 도는 상수 최적화장치(60)의 내부구성내의, 비용판단 및 재기록 유니트(10)의 처리를 나타내는 플로우 챠트이다.
제 6b 도는 상수 최적화장치(60)의 내부구성내의 메모리 변수 재기록 유니트(12)의 처리를 나타내는 플로우 챠트이다.
제 7a 도 내지 제 7f 도는 소스 프로그램 및 중간언어 프로그램의 예 및, 그 예를 재기록하는 방식을 나타내는 도면이다.
제 7a 도는 소스프로그램의 예를 나타낸다.
제 7b 도는 부분상수식 재기록 유니트를 통과한 중간언어 프로그램의 예를 나타낸다.
제 7c 도는 비용판단및 재기록 유니트를 통과한 중간언어 프로그램의 예를 나타낸다.
제 7d 도는 메모리 변수 재기록 유니트를 통과한 중간언어 프로그램의 예를 나타낸다.
제 7e 도는 상수보류변수 정의 제거유니트를 통과한 중간언어 프로그램의 예를 나타낸다.
제 8a 도 내지 제 8e 도는 상수변수정보의 내용의 전이방식을 나타내는 도면이다.
제 8a 도는 사용식 검지부(8)의 처리에 처해진 상수변수 정보의 예를 나타낸다.
제 8b 도는 부분상수식 재기록 유니트(9)의 처리에 처해진 상수변수 정보의 예를 나타낸다.
제 8c 도는 비용판단 및 재기록 유니트(10)의 처리에 처해진 상수변수 정보의 예를 나타낸다.
제 8d 도는 메모리 변수 재기록 유니트(12)의 처리에 처해진 상수변수 정보의 예를 나타낸다.
제 8e 도는 메모리 변수 재기록 유니트(12)의 처리에 처해진 상수변수 정보의 예를 나타낸다.
제 9 도는 마이크로 프로세서의 명령어 세트의 예를 나타낸다.
제 10 도는 비용유지 유니트(15)내에 등록된 정보의 예를 나타낸다.
제 11a 도는 소스 프로그램및 중간언어 프로그램의 예 및, 그 예의 재기록 방식을 나타내는 도면이다.
제 11b 도는 부분상수식 재기록 유니트를 통과한 중간언어 프로그램의 예를 나타낸다.
제 11c 도는 상수전파 및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 11d 도는 상수전파 및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 11e 도는 상수전파및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 11f 도는 상수전파및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 12 도는 본 발명의 최적화장치를 통과한 기계어 프로그램의 예를 나타낸다.
제 13a 도는 소스 프로그램및 중간언어 프로그램의 예및, 그 예의 재기록 방식을 나타내는 도면이다.
제 13b 도는 종래기술에서 상수전파및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 13c 도는 종래기술에서 상수전파및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 13d 도는 종래기술에서 상수전파및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 13e 도는 종래기술에서 상수전파및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 13f 도는 종래기술에서 상수전파 및 상수폴딩에 처해진 중간언어 프로그램의 예를 나타낸다.
제 14 도는 종래기술의 최적화장치가 상수전파 및 상수폴딩을 수행한 후에 발생된 기계어 프로그램을 나타내는 도면이다.
도면의 주요부분에 대한 부호의 설명
100 : 문법 해석기 200 : 최적화장치
300 : 코드 발생기 40 : 최적화 정보 검출기
50 : 일반-코드 최적화장치 60 : 상수최적화 장치
6 : 상수보류 변수정보 유지 유니트
7 : 상수보류 변수정의 검출 유니트
8 : 사용식 검출 유니트 9 : 부분상수식 재기록 유니트
10 : 비용판단 및 재기록 유니트 11 : 자원할당 유니트
12 : 메모리 변수 재기록 유니트
13 : 상수보류 변수정의 제거 유니트
14 : 제어유니트 15 : 비용유지유니트
16 : 레지스터 변수정의 비용계산 유니트
17 : 레지스터 변수 사용비용 계산유니트
18 : 상수사용 비용 계산유니트 19 : 재기록 판단 유니트
20 : 재기록 유니트 22 : 제어 유니트
23 : 레지스터 변수정의 유니트
본 발명은 고급언어로 쓰여진 프로그램을 기계어 프로그램으로 콤파일링하기 위한 콤파일러내에 마련되며, 높은 효율의 기계어 프로그램을 제작하기 위하여 소스 프로그램 또는 중간언어 프로그램을 최적화하는 최적화장치에 관한 것이다.
최근에, 기계어 프로그램 또는 어셈블러 프로그램의 개발효율을 개선하기 위하여 고급언어로 소스프로그램을 제작하는 것이 매우 열망되어 왔다. 이하에서, 기계어 프로그램은 어셈블러 프로그램을 포함한다. 고급언어로 쓰여진 소스 프로그램은 콤파일러에 의하여 기계어 프로그램으로 콤파일된다. 그러한 콤파일러에는 최적화장치가 마련된다. 프로그래밍 언어로 쓰여진 프로그램은 최적화장치에 의하여 다시 쓰여져서 마이크로 프로세서 또는 목표기계(target machine)내에서 효율적으로 실행되도록 된다.
한편, 가능한한 효율적인 기계어 프로그램이 요구되고 있다. 따라서, 최종적으로 제작된 기계어 프로그램의 전체 실행시간및 전체 프로그램의 크기를 최소화하기 위하여, 최적화장치는 프로그램을 다양한 방식으로 재기록하게 된다(최종적으로 준비된 기계어 프로그램의 전체 실행시간 또는 그러한 기계어 프로그램의 메모리 크기는 통상적으로 비용과 관련된다).
최적화장치에 의하여 실행된 처리는 프로그램을 재기록하는데 사용되어 전체 실행시간및 기계어 프로그램의 메모리 크기를 감소하는 상수 전파처리및 상수 폴딩(folding)처리를 포함한다. 이들 처리가 교대로 반복될 때, 최적화장치는 프로그램내의 식의 수를 크게 감소시킬 수 있다. 이를 제 13a 도 내지 13f 도를 참조하여 기술한다.
제 13a 도는 중간언어의 상태에서의 프로그램을 나타낸다. 도면에 있어서, 왼쪽 모서리에 나타낸 부호 s1, s2, s3, … 들은 프로그램 내의 위치를 각각 나타낸다. 상수 또는 변수인 피연산자와 연산자에 의하여 구성되는 프로그램의 코드(도면내에서 나타낸 a+x 또는 2000+a와 같은 것)는 연산식이라 불린다. 명세서에 있어서, a 또는 2000과 같이, 상수 또는 변수만으로 구성된 식도 마찬가지로 연산식으로 칭한다.
등호의 왼쪽에는 변수를 가지고 오른쪽에는 연산식을 가지는 프로그램의 코드(제 13b 도에서 a1=a+x와 같은 것), 또는 오른쪽이 변수 또는 상수인 a=b와 같은 일련의 코드는 치환식이라 불린다. 또한, 제 13b 도에서 s4의 위치에 있으며 모든 피연산자가 상수인 치환식 b=20000+10000은 특히 상수식이라 불린다.
치환식과 관련하여, 등호의 오른쪽에 있는 값이 왼쪽에 쓰여진 변수로 치환되는 과정을 변수의 정의라고 칭한다. 연산식의 피연산자에 대한 변수의 사용을 변수의 사용이라고 한다. a=b의 경우에서와 같이, 치환식의 오른쪽에 변수가 나타나는 구성을 사용이라고 칭한다.
제 13a 도에 있어서, s1 위치에서의 치환식에서, 상수 10000는 변수 a로 치환되었다. 상수가 치환된 변수를 상수 보류 변수라고 부른다. 4개의 화살표가 a로부터 연장되어 각각 다른 변수 a에서 마쳐지고 있다. 이 화살표는 a가 피연산자로서 사용되는 연산식을 나타낸다. 최적화장치는 모든 상수 보류 변수를 검색하고, 또한 상수 보류 변수가 피연산자로서 사용된 연산식을 검색한다. 검지후에, 최적화장치는 연산식내에서 피연산자로서 사용된 상수 보류 변수를 그의 보류값으로 재기록한다. 그러한 재기록의 결과로서, 제 13a 도의 프로그램내의 연산식은, 상수 보류 변수 a가 피연산자로서 사용된 연산식으로부터 그의 보류값 10000이 피연산자로 사용된 연산식으로 재기록된다.
제 13b 도는 이러한 재기록의 결과를 나타낸다. 도면에 있어서, 변수 x 및 y는 함수의 복귀값을 유지하는 상수보류 변수가 아니기 때문에 바뀌지 않은 채로 남아 있다.
또한, 이러한 재기록은 s1 에서의 치환식 a=10000이 중복되도록함을 알 수 있다. 최적화장치는 치환식을 중복적인 치환적으로 판단하고, 치환식을 삭제함으로써 식의 코드 크기가 감소되도록 한다. 상술한 피연산자의 재기록및 재기록처리의 결과로서 중복되는 치환식의 삭제처리를 상수전파라 한다.
이러한 재기록은 식 s4에서의 치환식을, 치환식 b=30000과 등가인 b=20000+10000이 되도록 함을 알 수 있다. 프로그램내에서 b=20000+10000과 같은 상수식이 나타날 때, 최적화장치는 그 상수식과 등가인 상수식 b=30000으로 그 상수식을 재기록한다. 상수식을 등가상수로 재기록하는 처리를 상수폴딩이라 한다. 최적화장치가 상수폴딩을 수행할 때, 치환식 b=30000이 프로그램에 나타나고, s4 위치에서의 변수 b는 새로운 상수보류 변수가 된다.
새로운 상수보류 변수가 전파 및 폴딩의 결과로서 나타날 때, 상수 보류 변수 a의 경우와 같이, 최적화장치는 상수보류 변수 b가 피연산자인 연산식을 검색한다. 3개의 화살표가 변수 b로부터 연장되어 있으며, 각각 다른 변수 b에서 끝나고 있다. 화살표들은 b가 피연산자로서 사용된 연산식을 가리킨다. 최적화장치는 s9, s10 및 s11 위치에서의 연산식을 검색하고, 연산식내에서 피연산자로서 사용된 상수 보류 변수 b를 그의 보류값인 30000으로 재기록한다. 이러한 재기록의 결과로, 제 13d 도에서 나타낸 바와 같이, s9, s10 및 s11 위치에서의 연산식은 u=1000+30000, z=30000+45000 및 v=30000+z로 각각 재기록된다. 이러한 재기록후에, 최적화장치는 상수폴딩을 수행함으로써 s9 및 s10 위치에서의 치환식이 각각 u=40000 및 z=75000으로 재기록된다. 이러한 재기록은 변수 u 및 z가 상수보류 변수로서 되도록 한다. 따라서, 최적화장치는 다시 이들 변수에 대한 전파 및 상수폴딩을 반복한다. 전파 및 상수폴딩이 이러한 방식으로 반복될 때, 상수보류 변수 u에 대한 값의 전파가 제 13e 도에서 나타낸 바와 같이 수행되고, s4, s9 및 s10 위치에서의 치환식이 삭제되고, 따라서 프로그램은 제 13f 도에서 나타낸 바와 같이 매우 단순하게 된다.
상술한 바와 같이 상수전파및 상수폴딩이 수행된 후에, 최적화장치는 자원할당처리를 수행하며, 따라서 프로그램내에 남아 있는 변수들이 레지스터 또는 메모리에 할당된다. 자원할당시에, 최적화장치는 이하의 이유때문에 상호간에 중복되어 있는 지속범위를 가지는 변수를 상이한 레지스터로 할당하게 된다. 지속범위는 변수의 치환으로부터 변수의 최종사용에 걸치는 프로그램내의 범위이다. 상호간에 중복되는 지속범위를 가지는 변수들이 동일한 레지스터에 할당될 때, 레지스터에 의해 유지되는 값을 저장및 회복하는 다수개의 처리가 기계에 프로그램내에 요구된다. 이에 의해서, 목표기계가 적은 수의 레지스터를 가지고, 상호간에 중복되는 지속범위를 가지는 변수가 많이 사용될 때, 최적화장치는 변수중의 몇개를 메모리로 할당하게 된다. 상술한 바와 같이 할당처리가 수행된 후에, 콤파일러는 제 14 도에 나타낸 바와 같이 할당결과의 근거하에 코드를 생성하고, 기계어 프로그램을 생성하게 된다.
상술한 바와 같이, 상수전파와 상수폴딩및 상수보류 변수의 삭제처리후에 자원할당처리가 수행될 때, 지속범위의 중복된 부분의 수는 삭제에 해당하는 양만큼 감소된다. 따라서, 레지스터를 효과적으로 사용하는 것이 가능하게 된다. 결과적으로, 제작된 기계어 프로그램의 수행사이클의 수와 코드의 크기가 감소된다.
그러나, 종래의 기술에 있어서는, 연산식의 피연산자가 상수전파및 상수폴딩에 의하여 그것이 유지하고 있는 값으로 재기록되며, 따라서 바이트 길이가 긴 중간데이타가 피연산자로서 사용된 기계어 코드가 생성된다. 결과적으로, 기계어 프로그램의 실행시간이 연장되며 메모리의 크기가 확장된다는 문제가 있었다.
상수전파및 상수폴딩에 의하여 제 13d 도에서 나타낸 바와 같이 재기록된 프로그램내의 변수 a1 및 a2가 각각 레지스터 d1 및 d2로 할당되고, 결과적으로 제 14 도에서 나타낸 기계어 코드가 생성된다고 가정한다.
기로 #을 각각 가지는 제 14 도내의 기계어 코드 add #10000, d1 및 add #10000, d2 내의 값 #10000은 2 바이트 길이의 중간값이다. 따라서, 레지스터가 피연산자로서 사용되는 제 12 도내에서 나타낸 기계어 명령의 경우와 비교할 때, 기계어 프로그램의 실행시간이 더 길어지고 메모리의 크기가 더 커지게 된다.
중간값이 개입되는 것을 방지하기 위하여, 변수 a의 전파를 수행하지 않는 것을 생각할 수 있다. 그러나, 이 경우에는, b=20000+a가 b=30000으로 폴딩될 수 없으며, 변수 b의 유지값 30000이 치환식 z=b+45000 및 v=b+z로 전파될 수 없다. 변수 b가 전파될 수 없을 때, 프로그램으로부터 변수 z 및 u를 삭제하는 것이 불가능해지며, 따라서 프로그램이 단순화될 수 없다.
상술한 문제점을 고려하여, 본 발명의 목적은 상수전파및 상수폴딩이 효과적으로 수행되고, 상수전파에 따른 비용의 증가를 방지할 수 있는 최적화장치를 제공하는 것을 목적으로 한다.
상술한 목적을 달성하기 위하여, 본 발명의 최적화장치는, 프로그래밍 언어로 기록된 프로그램을 기계어 프로그램으로 콤파일하기 위한 콤파일러에 장치되고, 프로그래밍 언어로 기록된 프로그램을 최적화하며 최적화된 프로그램을 출력하는 최적화장치로서; 상수가 상수보류 변수로 치환된 식과 상수보류 변수가 피연산자인 식을 연관시킴으로써, 상수가 상수보류 변수의 관련식 세트로서 치환된 변수인 상수보류 변수를 관리하기 위한 관리수단과; 상수보류 변수가 피연산자인 관련식 세트내의 식중에서, 다른 피연산자가 상수인 식과 상수보류 변수가 피연산자인 단항연산식을, 상수보류 변수에 의하여 유지된 상수가 피연산자인 식으로 재기록하는 제 1 재기록 수단과; 제 1 재기록수단의 재기록이 수행된 후에, 상수로 재기록되지 않은 상수보류 변수가 그 상수보류 변수로 유지된 상수 중간데이타로 교체되고 기계어 연산의 피연산자로서 설정될 때, 상수보류 변수가 피연산자인 식으로부터 생성된 기계어 명령의 코드크기 및/또는 수행 사이클을 평가하는 제 1 평가수단과; 제 1 재기록 수단의 재기록이 수행된 후에, 상수로 재기록되지 않은 상수보류 변수에 의하여 유지된 상수를 저장하는 레지스터가 기계어 연산의 피연산자로서 설정되었을 때, 상수보류 변수의 관련식 세트내에서, 상수가 상수보류 변수로 치환된 식 및 상수보류 변수가 피연산자인 식으로부터 생성된 기계어 명령의 코드 크기 및/또는 수행 사이클을 평가하는 제 2 평가수단과; 각 관련식 세트에 대한 제 1 평가수단의 평가결과와 제 2 평가수단의 평가결과를 비교하기 위한 비교수단과; 비교수단의 비교결과, 제 1 평가수단의 평가결과가 제 2 평가수단의 평가결과보다 크지 않을 때, 피연산자로서 사용된 상수보류 변수를 상수보류 변수의 상수로 재기록하는 제 2 재기록 수단;및 상수보류 변수가 연산자로 사용된 식이 상수보류 변수에 의하여 유지된 상수가 피연산자로 사용된 식으로 재기록될 때, 상수가 상수보류 변수로 치환된 식을 삭제하는 제 3 재기록 수단을 포함하여 구성된다.
본 발명의 최적화장치는;
제 1 및 제 2 재기록수단에 의하여 수행된 재기록으로 어떠한 피연산자가 상수로 만들어진 식을, 상수식의 연산결과인 식으로 재기록하는 제 4 재기록 수단과;
제 4 재기록 수단에 의하여 수행된 재기록에 의하여 생성된 식내에서 연산결과가 치환되는 신규의 상수보류 변수와, 상수가 상수보류 변수로 치환된 식과, 상수보류 변수가 피연산자로 사용된 식이, 관리수단에 의하여 상수보류 변수의 관련식 세트로서 관리되도록 하는 제어수단; 및 관리수단에 의하여 신규로 관리된 관련식 세트에 대하여 제 1 재기록 수단을 작동시키는 작동수단을 더욱 포함하여 구성된다.
본 발명의 최적화장치는; 제 2 재기록 수단에 의하여 수행된 재기록 및 삭제후에, 각 변수의 사용빈도및 변수의 지속영역의 중복상태의 근거하에, 프로그램내의 변수를 레지스터 또는 메모리로 할당하는 자원할당수단과; 자원할당수단에 의하여 메모리에 할당된 변수상에서 상수보류 변수의 판단을 수행하고, 판단된 상수보류 변수의 관련식 세트내의 피연산자인 상수보류변수를 상수로 재기록하는 제 5 재기록 수단을 더욱 포함하여 구성된다.
본 발명의 최적화장치는: 다수개의 기계어 명령및 각 기계어 명령의 코드크기 및/또는 수행 사이클을 나타내는 비용을 저장하기 위한 비용저장수단을 더욱 포함하여 구성되며, 제 1 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 상수보류 변수가 피연산자인 관련식 세트내의 각 식을, 그 식의 상수보류 변수가 그 상수보류 변수에 의하여 유지된 값인 상수를 나타내는 중간데이타로서의 피연산자인 기계어 명령으로 교체하는 제 1 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 1 누산수단을 포함하여 구성되며, 제 2 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 관련식 세트내에서, 상수가 상수보류 변수로 교체된 식과 상수보류 변수가 피연산자인 식을, 상수를 저장하는 레지스터가 피연산자로서 설정되어 있는 기계어 명령으로 교체하는 제 2 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 2 누산수단을 포함하여 구성되는 것을 특징으로 한다.
본 발명의 최적화장치에 따르면, 상수가 상수보류변수로 치환된 식을 상수 보류 변수가 피연산자인 식과 관련시킴으로써, 관리수단은 상수가 치환되는 변수인 상수보류 변수를 상수보류변수의 관련식 세트로서 관리하게 된다. 상수보류 변수가 피연산자인 관련식 세트내의 식중에서, 피연산자가 상수인 식과, 상수보류 변수가 피연산자인 단항 연산식들이, 제 1 재기록수단에 의하여 상수보류 변수에 의해 유지된 상수가 피연산자로 되는 식으로 재기록된다.
제 1 재기록수단이 재기록 연산을 수행한 후에, 제 1 평가수단은 식으로부터 발생된 기계어 명령의 코드 크기 및/또는 수행 사이클을 평가하고, 그 식에서는 상수로 재기록되지 않은 상수유지 변수의 관련식 세트내의 상수보류 변수가 피연산자이다.
기계어 명령에 있어서, 상수보류 변수에 의하여 유지된 상수를 표시하는 중간 데이타는 기계어 명령의 피연산자로서 설정된다. 상수보류 변수가 피연산자인 관련식 세트내의 식으로부터, 예를 들면, 하나의 피연산자는 레지스터 또는 메모리이고 다른 피연산자는 중간값인 기계어 명령이 발생된다. 제 1 평가수단은 상수의 바이트 길이의 근거하에 관련식의 세트의 유니트내의 기계어 명령의 코드 크기 및/또는 수행 사이클을 평가한다.
한편, 제 1 재기록수단이 재기록 연산을 수행한 후에, 제 2 평가수단은 상수로 재기록되지 않은 상수보류 변수의 관련식 세트내에서, 상수가 상수보류 변수로 치환된 식및 상수보류 변수가 피연산자인 식으로부터 발생된 기계어 명령의 코드크기 및/또는 수행사이클을 평가한다. 기계어 명령내에서, 상수보류 변수에 의하여 유지된 상수를 저장하는 레지스터가 기계어의 피연산자로서 설정된다. 상수가 상수보류 변수로 치환된 관련식 세트내의 식으로부터, 예를 들면, 상수 중간데이타를 레지스터 또는 메모리로 치환하는 것과 같은 기계어 명령이 발생한다. 상수보류 변수가 피연산자인 관련식 세트내의 식으로부터, 기계어 명령이 발생되고, 여기에서 하나의 피연산자는 레지스터 또는 메모리이고 다른 피연산자는 상수를 저장하는 레지스터이다. 제 2 평가수단은 상수의 바이트 길이의 근거하에 관련식 세트의 유니트내의 기계어 명령의 코드크기 및/또는 수행사이클을 평가한다.
비교수단은, 각 관련식 세트에 대하여, 제 1 평가수단의 평가결과를 제 2 평가수단의 평가결과와 비교한다. 비교수단의 비교의 결과로서, 제 1 평가수단의 평가결과가 제 2 평가수단의 평가결과보다 크지 않은 관련식 세트내에서, 제 2 재기록 수단은 피연산자로서 사용된 상수보류 변수를 상수보류 변수내에 유지된 상수로 재기록한다. 피연산자로서 사용된 어떠한 상수보류 변수가 이러한 방식으로 상수로 재기록될 때, 모든 상수가 상수보류 변수로 치환된 식이 넘치게 된다. 따라서, 상수가 상수보류 변수로 치환된 식이 제 3 재기록 수단에 의하여 프로그램으로 부터 제거된다.
상술한 바와 같이, 제 1 평가수단의 평가결과가 제 2 평가수단의 평가결과보다 크지 않을 때 하나의 피연산자가 상수보류 변수인 연산식상에서 상수 전파가 수행된다. 따라서, 상수전파에 기인한 비용의 증가가 발생하는 것이 방지된다.
또한, 본 발명의 최적화장치에 따르면, 제 1 및 제 2 재기록 수단에 의하여 수행된 재기록에 의하여 피연산자가 상수로 만들어진 식은 연산 결과가 치환된 식으로 제 4 재기록수단에 의하여 재기록된다. 피연산자가 상수로 만들어진 식은 d=100+200 또는 s=30+10*4와 같이, 등호의 오른쪽상에 어떠한 변수도 없는 식이다. 연산결과는 100+200의 경우에 300 및, 30+10*4의 경우에 70과 같이, 상수식에 등가인 상수 (중간 데이타)이다. 관련식 세트내의 식중에서, 제 1 재기록수단에 의하여 수행된 재기록의 결과로서, 다른 피연산자가 상수인 식과 상수보류 변수가 피연산자인 단항 연산식들은 폴딩이 가능한 상태에 있게 된다. 그러한 식이 상승 될 때, 식내에서 치환된 변수는 상수보류 변수가 된다. 상수전파가 상수보류 변수상에서 수행될 때, 프로그램의 단순화가 선행기술에서와 동일한 정도로 수행될 수 있다.
제 4 재기록 수단의 재기록이 수행된 후, 제어수단은, 재기록에 의하여 발생된 식내에서 연산결과가 치환되는 신규의 상수보류 변수와, 상수가 그 상수보류 변수로 치환된 식, 및 그 상수보류 변수가 피연산자로서 사용된 식들이 관리수단에 의하여 상수보류 변수의 관련식 세트로서 관리되도록 한다. 제 1 재기록 수단은 관리수단에 의하여 신규하게 관리된 관련식 세트상에서 작동된다. 제 1 재기록 수단이 작동될 때, 제 1 및 제 2 평가수단이 작동되고, 제 2 재기록 수단이 작동된다. 따라서, 신규의 상수보류 변수 관련식 세트가 수행 사이클 및/또는 코드사이즈의 평가및, 평가결과의 근거하에 관련식 세트내의 식의 재기록에 처해지게 된다.
더우기, 본 발명의 최적화장치에 의하면, 제 2 재기록 수단에 의하여 재기록이 수행된 후에, 변수의 지속영역의 중복상태의 근거하에, 자원할당수단이 프로그램내의 변수를 레지스터 또는 메모리로 할당한다. 자원할당수단에 의하여 메모리에 할당된 변수가운데, 상수보류 변수인 변수가 판단된다. 제 5 재기록 수단은 판단된 상수보류 변수의 관련식 세트내의 연산자인 상수보류 변수를, 상수보류 변수내에 유지된 상수로 재기록 한다. 상수보류 변수가 피연산자로서 사용된 식이, 상수보류 변수에 의하여 유지된 상수가 피연산자로서 사용된 식으로 재작성될 때, 제 3 재기록 수단은 상수가 상수보류 변수로 치환된 식을 제거한다.
또한, 본 발명의 최적화장치에 따르면, 각 기계어 명령의 코드크기 및/또는 수행 사이클을 나타내는 비용및 다수개의 기계어 명령들이 비용과 그 명령을 연관되어 비용 저장수단내에 저장된다.
관련식 세트내에서, 제 1 재기록 수단에 의하여 재기록이 수행된 후, 상수보류 변수가 피연산자인 각 식은, 제 1 교체 수단에 의하여, 상수보류 변수가 그 상수보류 변수에 의하여 유지된 중간데이타로 교체되고 피연산자로서 사용된 기계어 명령으로 교체된다. 각 기계어 명령과 관련된 비용은 비용저장수단으로부터 판독된다. 제 1 누산수단은 판독된 비용을 누산하고 누적결과를 평가결과로서 설정한다.
관련식 세트내에서, 제 1 재기록 수단에 의하여 재기록이 수행된 후, 상수가 상수보류 변수에 치환된 각식및 그 상수보류 변수가 피연산자인 각 식이 제 2 교체수단에 의해서 상수를 저장하는 레지스터가 피연산자로서 설정된 기계어 명령으로 교체된다. 각 교체된 기계어 명령과 관련된 비용은 비용저장수단으로부터 판독한다. 제 2 누산수단은 판독된 비용을 누산히고, 그 누산결과를 평가결과로서 설정한다.
[실시예]
이하, 첨부된 도면을 참조하여 본 발명의 최적화장치의 실시예를 기술한다. 최적화장치는 c 언어와 같은 고급언어를 위한 콤파일러내에 마련되며, 콤파일러가 소스프로그램에 대한 어휘해석, 문법 해석, 및 의미해석을 수행한 후에 작동된다.
[콤파일러의 구성]
제 1a 도는 본 발명의 실시예내의 콤파일러의 구성도이다. 콤파일러는 문법 해석기(100), 최적화장치(200) 및 코드 발생기(300)를 포함하여 구성된다.
문법 해석기(100)는 파일로서 저장된 소스프로그램에 대한 어휘해석, 문법 해석, 및 의미해석을 수행한다. 해석결과는 중간언어 프로그램의 형태로 출력된다.
최적화장치(200)는 최종적으로 준비된 기계어 프로그램의 프로그램 크기를 감소시키고 실행시간이 단축되도록 중간언어 프로그램을 최적화한다.
코드 발생기(300)는 최적화된 중간언어 프로그램을 목표기계의 기계어 명령으로 변환하고, 기계어 프로그램의 형태로 명령을 출력한다.
[최적화장치(200)의 구성]
제 1b 도는 제 1a 도에서 나타낸 최적화장치의 구성도이다. 최적화장치(200)는 최적화 정보 검출기(40), 일반-코드 최적화장치(50)및 상수 최적화장치(60)를 포함하여 구성된다.
최적화 정보 검출기(40)는 데이타 플로우 해석및 제어 플로우 해석을 수행하고, 최적화 처리에 필요한 정보를 검출한다. 데이타 플로우 해석은 예를 들어 변수가 정의및 참조되는 위치의 해석이다. 제어 플로우 해석은 프로그램내의 제어플로우의 해석이다.
일반-코드 최적화장치(50)는 데드-코드 제거, 인라인 확장 및 루프 불변식의 코드이동과 같은, 상수최적화를 제외한 최적화를 수행한다. 데드-코드 제거, 인라인 확장 및 루프 불변식의 코드이동과 같은 기타 최적화 연산은 본 발명의 범위내에 있는 것이 아니므로 이들에 대한 설명은 생략한다.
[상수 최적화장치(60)의 내부 구성]
제 2 도는 상수 최적화장치(60)의 구성도이다. 상수 최적화 장치(60)는 상수보류 변수정보 유지 유니트(6)와, 상수보류 변수 정의 검출유니트(7)와, 사용식 검출 유니트(8)과, 부분상수식 재기록 유니트(9)와, 비용판단 및 재기록 유니트(10)와, 자원할당 유니트(11)와, 메모리 변수 재기록 유니트(12), 및 상수보류 변수정의 제거 유니트(13)를 포함하여 구성된다.
상수보류 변수정보 유지 유니트(6)내에는, 프로그램내에서 정의된 다수개의 상수보류 변수에 의하여 유지된 상수유지 변수정보의 데이타베이스가 구성된다. 상수보류 변수정보의 예는 상수보류 변수정보 유지유니트(6)를 나타낸 도면내의 틀내에 나타낸다. 각 상수보류 변수정보는: 상수보류 변수의 명칭과; 상수보류 변수가 정의되고, 프로그램내의 위치 정보의 수단에 의하여 표시된 위치와; 상수보류 변수에 의하여 유지된 값과; 상수보류 변수가 할당되는 자원을 나타내는 자원 열(列)과; 상수보류 변수가 사용되고 프로그램내의 위치정보의 수단에 의하여 표시된 위치; 및 각 사용위치로 전파될 유지값인지 아닌지를 나타내는 사용위치의 사용속성에 의하여 구성된다. 도면에 있어서, 변수 a로부터 본측방향으로, 차례로 s1, 200, 등록, s2 및 전파가 배열된다. 이는, 변수 a의 유지값은 200이라는 것을 의미한다. 이는 또한, 변수 a가 레지스터에 할당되고 위치 s2에서 사용되며, 사용속성이 전파로 치환되는 것을 의미한다.
b로부터 옆방향으로는 s3, 10200, 메모리, s4 및 비전파의 순으로 배열된다. 그 배열의 아래쪽 열에는, s5 및 비전파가 배열된다. 이는, 변수 b의 정의 위치는 s3이며, 유지값이 10200임을 의미한다. 이는 또한 변수 b가 메모리에 할당되고, 위치 s4에서의 사용속성이 비전파로 치환되는 것을 의미한다. 하부열내의 s5 및 비전파의 배열은, 변수 b가 위치 s4에 부가하여 위치 s5에서도 마찬가지로 사용되는 것을 의미하며, 위치 s5는 비전파임을 의미한다.
상술한 위치정보는 제 13a 내지 제 13f 도에서 나타낸 예에서와 같은 각 연산식에 대하여 마련된 정보이며, 도면에서 s1, s2, s3, s4, …에 해당한다.
상수보류 변수 정의 검출유니트(7)는 프로그램으로부터 상수나 상수식이 변수로 치환된 치환식을 검출하고, 검출된 치환식내에서 정의된 상수보류 변수의 명칭과, 상수보류 변수의 정의위치, 및 상수보류 변수에 의하여 유지된 값을 점검한다. 상수보류 변수정의 검출유니트(7)는 이들 정보의 세트를 한 세트의 상수보류 변수 정보로 묶고, 상수보류 변수정보 유지 유니트(6)의 데이타베이스내에 그 정보를 등록한다. 상수보류 변수는 상술하였다. 상수보류 변수가 아닌 변수는 치환식에 의하여 독특하게 결정되지 않는 값을 가지는 변수이다. 예를 들어, 이들 값은 종래의 예에서 설명한 바와 같이 함수의 복귀값을 저장하는 변수나 프로그램의 수행동안의 값에 있어서 변화하는 변수에 해당한다.
사용식 검출유니트(8)내에서는, 상수보류 변수정보 유지유니트(6)에 의하여 유지된 모든 상수보류 변수에 관하여, 상수보류 변수가 피연산자로 우치된 모든 연산식들이 프로그램으로부터 검출된다. 검출된 연산식의 위치들은 상수보류 변수정보 유지유니트(6)의 데이타베이스내에 등록되고, 사용위치의 사용속성은 비전파로 설정된다.
부분상수식 재기록 유니트(9)내에서는, 프로그램내에서 피연산자로서 사용된 상수보류 변수가 그의 유지된 값으로 교체될 때, 피연산자를 담고 있는 연산식이 상수 또는 상수식으로 되는지의 여부가 예견된다. 데이타 플로우 해석의 결과에 비추어서, 교체가 수행될 때에도, 변수사이의 종속관계가 보장될수 있는지의 여부가 검증된다. 만약, 일련의 처리의 결과로서, 유지값으로의 교체가 처리식을 상수 또는 상수식으로 하는지가 예견되고, 변수사이의 종속관계가 유지될 수 있는 것이 검증되면, 교체가 수행된다. 교체의 수행후에, 비전파가 상수보류 변수 정보 유지 유니트(6)내에 유지된 상수보류 변수정보의 사용속성으로서 교체되고, 그에 의하여 교체의 추적이 유지되도록 한다.
비용판단및 재기록 유니트(10)내에서는, 상수보류 변수정보 유지유니트(6)내에 유지된 정의 위치를 가지는 변수에 관하여, 변수의 사용이 상수의 사용과 교체되는 경우에 어느 쪽의 비용이 낮은가 또는 어디에서 변수가 등록변수(레지스터에 할당된 변수)로서 사용되는지가 예견된다. 또한, 데이타 플로우 해석의 결과로부터, 교체가 수행되었을 때라도, 변수사이의 종속관계가 보장될 수 있는지의 여부가 검증된다. 만약, 일련의 처리의 결과로서, 상수로의 교체가 비용면에서 낮고 변수사이의 종속관계가 보장될 수 있다고 검증되면, 교체가 수행된다. 전파가 상수보류 변수정보 유지 유니트(6)내에 유지된 상수보류 변수정보의 사용속성으로 교체되고, 그에 의하여 교체의 추적이 유지된다.
자원할당 유니트(11)의 내에서는, 프로그램내의 변수가 목표기계의 마이크로프로세서내에 배치된 레지스터 또는 메모리로 할당된다. 자원할당전에, 자원할당유니트(10)는 변수의 지속영역의 중복상태와 관련하여, 값 전파및 폴딩을 겪은 프로그램을 점검한다. 상호간에 중복하는 변수는 상이한 레지스터로 할당된다. 자원할당 유니트(11)는 또한 다음 단계와 각 변수의 사용빈도를 점검한다. 각 변수는 점검결과의 근거하에 우선권이 부여된다. 우선권의 감소순서로, 변수들이 레지스터에 할당된다. 그러한 자원할당의 수행후에, 특히 상수보류 변수와 관련하여, 자원할당 유니트(11)는 상수보류 변수가 할당된 메모리 또는 레지스터를 나타내는 정보를 상수보류 변수정보 유지유니트(6)의 상수보류 변수 데이타베이스에 반영한다.
메모리 변수 재기록 유니트(12)내에서는, 레지스터로의 할당비용이 낮다고 예견되고, 변수가 그의 유지값으로 재기록 되었을 때에도, 변수 사이의 종속관계가 보장될 수 있다고 예견되고, 자원할당 유니트(11)에 의하여 레지스터로 할당되지 않은 상수가 유지값의 상수로 재기록된다. 전파가 상수보류 변수정보 유지 유니트(6)내에 유지된 상수보류 변수 정보의 사용속성으로 교체되고, 그에 의하여 교체의 추적이 유지된다.
상수보류 변수 정의제거 유니트(13)내에서는, 상수보류 변수 정보 유지 유니트(6)내에 유지된 상수보류 변수가 점검된다. 만약 상수보류변수에 속하는 모든 사용속성이 전파로 설정되면, 상수보류 변수를 정의하는 치환식이 제거된다.
제 3 도는 제 2 도에서 나타낸 부분상수식 재기록 유니트(9)의 처리를 나타내는 플로우챠트이다.
a1 단계는 a10 단계와 연합하여, 상수보류 변수정보 유지유니트(6)내에 유지된 모든 상수보류 변수들이 처리오브젝트로서 하나하나 사용되며 후속의 처리 (a2 단계 내지 a9 단계)들이 반복된다.
a2 단계는 a9 단계와 연합하여, 현재 a1 단계에서 처리되는 상수보류 변수가 피연산자로서 포함되는 모든 연산식에 대하여 후속의 처리(a3 단계 내지 a8 단계)가 반복된다.
a3 단계에서는, 현재 처리된 상수보류 변수가 그의 유지값으로 교체되었을 때, 상수보류 변수를 포함하는 연산식이 상수식으로 되는지 아닌지의 여부가 점검된다. 특히, a3 단계에서, 상수보류 변수는, 그것이 단항 연산자의 피연산자인가 아닌가와, 이항연산자의 피연산자인가및 다른 피연산자가 상수 또는 상수보류 변수인가 아닌가를 보기 위하여 점검된다. 단항연산자는, 단일 연산자및 단일 피연산자만이 존재하는 a=-b와 같은 치환식을 의미한다.
a4 단계에서는, 프로그램내의 피연자의 위치에서 상수보류 변수가 그의 유지값으로 교체된다(상수전파의 수행). 상수보류 변수정보 유지유니트(6)내에 유지된 상수보류 변수정보의 사용위치의 사용속성은 전파로 설정된다.
a5 단계에서는, a4 단계에서의 교체의 결과, 신규의 상수식이 프로그램내에 나타났는가의 여부가 점검된다. 프로그램내의 신규의 상수식은 상수로 폴딩된다.
a6 단계에서는, a4 및 a5 단계에서 재기록된 식(치환식)이 상수보류 변수를 정의하는 치환식이 되는지의 여부가 판단된다.
a7 단계에서는, a6 단계에서 일치되는 것으로 판단된 상수보류 변수를 정의하는 치환식에 관하여, 상수보류 변수의 명칭, 정의위치, 및 유지값이 상수보류 변수 정보유지 유니트(6)의 데이타베이스내에 등록되도록 묶여진다.
a8 단계에서는, a7 단계에서 상수보류 변수정보 유지유니트(6)의 데이타베이스내에 저장된 상수유지 변수에 관하여, 상수보류 변수가 피연산자에 위치한 모든 연산식들이 프로그램으로부터 검출된다. 검출된 연산식의 위치들은 상수보류 변수정보 유지유니트(6)내에 등록되며, 상수 보류 변수정보의 사용속성은 비전파로 설정된다.
a1 내지 a10 단계의 처리의 결과, 프로그램내에서 피연산자인 상수보류 변수들이 그의 유지값으로 재기록되고 상승된 상태가 얻어진다.
[제 2 도에서 나타낸 비용판단및 재기록 유니트(10)의 내부구성]
제 4a 도는 비용판단및 재기록 유니트(10)의 내부구성도이다.
제 4a 도에서 나타낸 바와 같이, 비용판단및 재기록 유니트(10)는, 제어 유니트(14)와, 비용을 계산하기 위한 단서로서 기능하는 정보를 유지하는 비용유지 유니트(15)와, 레지스터 변수정의 비용계산 유니트(16)와, 레지스터 변수 사용비용 계산유니트(17)및, 상수사용 비용 계산유니트(18)를 포함하여 구성된다. 비용판단및 재기록 유니트(10)는 또한 이들 3개의 계산유니트의 계산결과의 근거하에 상수보류 변수가 재기록되었는지의 여부를 판단하는 재기록 판단 유니트(19)및, 판단유니트의 판단결과와 관련하여 재기록을 수행하는 재기록 유니트(20)를 더욱 포함하여 구성된다.
제어유니트(14)는 제 6a 도의 플로우 챠트에 의하여 처리를 수행한다.
제 6a 도는 제어유니트(14)의 처리를 나타낸 플로우챠트이다.
b1 단계는 상수보류 변수정보 유지유니트(6)내에 등록된 상수보류 변수들이 처리오브젝트로서 하나하나 처리되고, b2 단계 내지 b6 단계의 처리가 반복되도록 b7 단계와 연합한다.
b2 단계에서는, 현재 처리된 상수보류 변수와 관련하여, 상수보류 변수의 정의 위치의 데이타가 상수보류 변수정보 유지유니트(6)로부터 꺼내어진다. 상수보류 변수 정의 위치에 있는 치환식내에서 소비되어야하는 비용(이하, 이 비용을 등록변수 정의비용이라 한다)이, 치환식을 꺼내고 등록변수로서 상수보류 변수를 정의하기 위하여 평가된다.
b3 단계에서는, 현재 처리된 상수보류 변수의 사용위치 가운데에서, 사용속성이 전파되지 않은 모든 사용위치가 상수보류 변수 정보유지 유니트(6)로부터 꺼내어진다. 꺼내어진 사용위치에서 피연산자로서 상수보류 변수를 포함하는 연산식내에서 소비되어야 하는 비용이, 연산식을 꺼내고 등록변수로서 상수보류 변수를 사용하기 위하여(이하, 이 비용을 등록변수 사용비용이라 칭한다) 평가된다.
b4 단계에서는, 현재 처리된 상수보류 변수의 사용위치 가운데에서, 사용속성이 비전파인 모든 사용위치가 상수보류 변수 정보유지 유니트(6)로부터 꺼내어진다. 꺼내어진 사용위치에서 피연산자로서 상수보류 변수를 포함하는 연산식내에서 소비되어야 하는 비용이, 연산식을 꺼내고 그것을 상수로 교체하는 상수보류 변수를 사용하기 위하여(이하, 이 비용을 상수 사용비용이라 칭한다) 평가된다.
b5 단계에서는, b2 내지 b4 단계에서 계산된 비용으로부터, 등록변수 정의비용및 등록변수 사용비용의 합이 계산되고, 그 합은 상수사용 비용과 비교된다.
만약 상수사용 비용이 b5 단계에서의 합과 같거나 작으면, b6 단계의 처리가 수행된다. 이 경우에, 상수보류 변수를 상수로 교체하는 비용이 전체적으로 낮으며, 따라서 현재 처리된 상수보류 변수의 사용위치들이 상수보류 변수 정보유지 유니트(6)로부터 꺼내어진다. 또한, 각 상수보류 변수 사용위치에서 피연산자로서 상수보류 변수를 포함하는 연산식이 꺼내어진다. 연산식의 피연산자인 상수보류 변수의 사용은 유지값인 상수의 사용으로 교체된다. 사용위치의 사용속성이 전파로 설정된다.
b1 내지 b7 단계의 처리의 결과, 프로그램내의 상수보류 변수가운데, 레지스터로서의 사용이 낮은 비용을 소비하는 쪽이 레지스터 변수로 교체되고, 다른 것은 상수보류 변수의 값인 상수로 교체되는 상태가 얻어진다.
제 4a 도에서 나타낸 비용유지 유니트(15)는 정의 및 사용을 수행하기 위한 기계어 코드의 전형적인 예를 나타내는 모든 패턴및 그 패턴내에서 소비되는 비용을, 패턴및 비용과 관련하여 유지한다. 제 5 도는 비용유지 유니트(15)내에 유지된 일련의 내용을 나타낸다. 제 5 도에 있어서, 명령, 크기 및 사이클들이 비용유지 유니트(15)를 나타내는 틀내에 횡방향으로 배치된다.
명령의 아래쪽에는, 상수보류 변수정의, 8-비트 상수, 16-비트 상수 및 24-비트 상수가 아래쪽으로 배열된다. 8-비트 상수의 측면에는 2 및 1이 배열된다. 이는, 8-비트 길이의 상수보류 변수가 정의되었을 때, 2의 메모리 크기가 소비되고 1의 수행사이클이 상수보류 변수를 포함하는 연산식내에서 소비되는 것을 의미한다. 24-비트의 측부에는 5및 3이 배열된다. 이는, 24-비트의 상수보류 변수가 정의되었을 때, 5의 메모리 크기가 소비되고, 3의 수행사이클이 상수보류 변수를 포함하는 연산식 내에서 소비되는 것을 의미한다.
레지스터 변수의 부가--상수 8-비트의 측부에는 2및 1이 배열된다. 이는, 8비트 길이의 상수를 유지하는 상수보류 변수가 정의되었을 때, 2의 메모리 크기가 소비되고, 1의 수행사이클이 그 사용을 수행하는 연산식 내에서 소비되는 것을 의미한다. 레지스터변수의 부가--16비트의 측면에는 4 및 2가 배열된다. 이는, 16비트 길이의 상수를 유지하는 상수보류 변수가 정의되었을 때, 4의 메모리 크기가 소비되고, 2의 수행사이클이 그 사용을 수행하는 연산식 내에서 소비되는 것을 의미한다.
상수보류 변수정의및 레지스터 변수의 부가--상수 8-비트에 부가하여, 도면에는 레지스터변수의 부가와, 메모리로부터의 로딩, 메모리내로의 저장등이 있다. 비용유지 유니트(15)는 또한 이들 명령에 의하여 소비되는 비용을 유지하며, 따라서 프로그램내에 포함된 모든 식에 대하여 비용이 계산될 수 있다. 비용유지 유니트(15)의 내용은 콤파일러의 목표인 프로세서의 명령세트에 의하여 결정된다. 명령세트의 일부의 예를 제 5 도의 하부에 도시하였다. 제 5 도의 상부에 도시된 비용유지 유니트(15)의 내용은, 명령세트에 근거하여 결정된 것이다. 제 5 도를 참조하면, 식 #imm8은 8 비트에 의하여 대표될 수 있는 상수를 나타낸다. dn 및 reg은 레지스터를 나타낸다. @mem은 메모리를 나타낸다.
레지스터 변수정의 비용 계산유니트(16)는 b2 단계내의 추론을 수행한다. 특히, 비용유지 유니트(15)는 상수보류 변수를 정의하는 치환식에 의하여 재생되며, 치환식에 맞는 비용이 취해지고, 비용이 추론결과로서 사용된다.
레지스터 변수사용 비용계산 유니트(17)는 b3 단계내에서 추론을 수행한다. 특히, 사용속성이 비전파로 되는 상수보류 변수사용 위치가 취해진다. 비용유지유니트(15)는 사용위치에서 피연산자로서 상수보류 변수를 포함하는 연산식을 재생 아이템으로서 사용함으로써 재생에 처해진다. 재생아이템에 맞는 비용이 취해지고, 취해진 비용이 누산되고, 그 누산은 추론결과로서 사용된다.
상수사용 비용계산 유니트(18)는 b4 단계에서 작동되고, 변수에 의하여 유지된 상수로 상수보류 변수가 교체되는 연산식을 재생아이템으로써 사용함으로써, 사용속성이 비전파인 상수보류 변수사용위치에서 피연산자로서의 상수보류 변수를 포함하는 연산식에 관하여 비용유지 유니트(15)상의 재생을 수행한다. 재생아이템과 맞는 비용이 취해지고, 취해진 비용이 누산되며, 누산은 추론결과로서 사용된다.
재기록 판단유니트(19)는 b5 단계에서 작동하며, 레지스터 변수정의 비용계산 유니트(16)로부터는 레지스터 변수 정의 비용을 받아들이고, 레지스터 변수사용비용 계산수단(17)으로부터는 레지스터 변수사용 비용을 받아들인다. 재기록 판단유니트(19)는 또한 상수사용 비용계산 유니트(18)로부터 상수사용 비용을 받아들이고, 레지스터 변수정의 비용및 레지스터 변수사용비용의 합을 계산한다. 그리고, 그 합은 상수사용 비용과 비교된다. 만약 상수사용비용이 그 합계와 같거나 낮으면, 상수유지 변수를 유지값으로 재기록하는 비용이 전체적으로 낮다. 따라서, 상수보류 변수가 상수로 재기록 되도록 재기록 유니트(20)가 불러진다. 만약 상수사용 비용이 높으면, 상수보류 변수를 레지스터 변수로 바꾸는 비용이 전체적으로 낮고, 따라서 재기록은 수행되지 않는다.
재기록 유니트(20)는 상수보류 변수정보 유지유니트(6)및, 상수보류 변수사용위치에서 피연산자로서의 상수보류 변수를 포함하는 연산식으로부터 현재 처리된 상수보류 변수의 사용위치를 취한다. 프로그램내의 상수보류 변수의 사용이, 유지값의 사용으로 교체되고, 각 사용위치에서의 사용속성이 전파로 된다.
[제 2 도에서 나타낸 메모리변수 재기록 유니트(12)의 내부구성]
제 4b 도는 메모리변수 재기록 유니트(12)의 내부구성도이다.
메모리변수 재기록 유니트(12)는 제어 유니트(22)와, 레지스터 변수 판단유니트(23) 및 재기록 유니트(24)를 포함하여 구성된다.
상수보류 변수정보 유지유니트(6)내에 유지된 상수보류 변수의 각각에 대하여, 제어유니트(22)는 레지스터 변수판단 유니트(23)를 부른다.
제 6b 도는 제 4b 도에서 나타낸 제어유니트(22)의 처리를 나타내는 플로우챠트이다.
c1 단계는 c7 단계와 연합하여, 상수보류 변수정보 유지유니트(6)내에 등록된 모든 상수보류 변수에 대하여 계속되는 처리(c2 단계내지 c6단계)반복하도록 한다.
c2 단계에 있어서는, 현재 처리된 상수보류 변수와 관련하여, 변수가 할당되는 자원이 상수보류 변수정보 유지유니트(6)로부터 꺼내어지고, 변수가 메모리로 할당되었는가의 여부가 판단된다.
c3 단계는 c6 단계와 협조하여, c2 단계에서 메모리에 할당될 것으로 판단된 상수보류 변수에 관하여, 상수보류 변수의 사용이 상수보류 변수 정보 유지 유니트로부터 취해진다. 그 다음에, 모든 상수보류 변수의 사용에 대해서 후속의 처리(c4 및 c5 단계)가 반속된다.
c4 단계에 있어서는, 현재 처리중인 상수보류 변수의 사용에 관하여, 변수의 사용속성이 상수보류 변수정보유지 유니트(6)로부터 취해지고, 사용속성이 비전파인가의 여부가 판단된다.
c5 단계에 있어서는, c2 단계에서 메모리에 할당될 것으로 판단되고, c4 단계에서 판단된 사용속성이 비전파인 상수보류 변수의 사용에 관하여, 사용위치가 상수보류 변수정보 유지유니트(6)로부터 꺼내진다. 그 사용위치에서 피연산자로서 사용된 상수보류 변수는 그의 유지값인 상수값으로 교체되고, 사용속성이 전파로 설정된다.
c1 내지 c7 단계의 처리의 결과로서, 프로그램내의 상수보류 변수중에서, 자원할당의 결과로 메모리에 할당된 것이 그의 유지값으로 교체되는 상태가 얻어진다.
레지스터 변수판단 유니트(23)는 상수보류 정보유지 유니트(6)로부터 현재 처리된 상수보류변수의 사용속성을 꺼낸다. 상수보류 정보유지 유니트(6)의 자원열의 근거하에, 변수가 레지스터 또는 메모리에 할당되었는가의 여부가 판단된다. 만약 변수가 메모리에 할당된 것으로 판단되면, 그 변수의 사용속성이 비전파인가의 여부가 더욱 판단된다. 만약 사용속성이 비전파이면, 재기록 유니트(24)가 작동된다.
재기록 유니트(24)는 레지스터 변수 판단유니트(23)에 의해서 작동되고 상수보류 변수정보 유지유니트(6)로부터 현재 처리된 상수보류 변수의 모든 위치를 꺼낸다. 꺼내진 각 위치에서 피연산자로서 위치하는 상수보류 변수가 그의 유지값으로 재기록되고, 상수보류 변수의 사용위치의 사용속성이 전파로 설정된다.
[제 7a 내지 7f 도의 중간언어 프로그램이 처리오브젝트로서 사용된 처리의 예]
이하, 제 7a 도에서 나타낸 프로그램이 입력으로서 그와 같이 구성된 최적화장치에 공급되었을 때에 수행되는 처리에 대하여 처리예로서 기술한다.
(1) 상수보류 변수정의 검출유니트(7)는 제 7a 도의 프로그램내의 s1 위치에서 정의식(상수를 상수보류 변수로 설정한 치환식)을 검출한다. 상수보류변수 정의검출 유니트(7)는 검출된 상수보류변수의 명칭, 정의위치 s1, 및 상수보류변수값(200)을 상수보류변수정보의 한세트로 묶고, 상수보류변수 정보유지 유니트(6)의 데이타베이스내에 그 정보를 등록한다.
(2) 사용식 검출유니트(8)는 프로그램으로부터, 상수보류 변수정보유지 유니트(6)내에 등록된 상수보류 변수 a의 사용식을 검색하고, s2 위치에서의 상수보류 변수 a의 사용식을 검출한다. 사용식 검출유니트(8)는 검출된 사용위치 s2와 사용속성 비전파를 한 세트의 상수보류 변수정보로서 묶고, 상수보류 변수 정보유지 유니트(6)의 데이타베이스내에 등록한다. 유사하게, 사용식 검출유내트(8)는 상수보류 변수 a의 사용을 검색하고 s3 위치에서의 연산식을 검출한다. 사용식 검출유니트(8)는 상수보류 변수정보 유지유니트(6)의 상수보류 변수 a의 열내에 사용속성으로서 비전파를 기록한다. 이 단계에서, 상수보류 변수정보 유지유니트(6)내에 유지된 정보가 제 8a 도내에 나타내었다.
(3) 부분상수식 재기록 유니트(9)내에, a1 내지 a10 단계의 루프가 상수보류 변수정보 유지유니트(6)의 각 상수보류 변수에 대하여 반복된다. 이 단계에서, 유니트는 상수보류 변수 a 만을 유지하고 있다. 따라서, a1 내지 a10의 단계의 루프가 상수보류변수 a에 대해서 수행된다.
상수보류변수 정보유지 유니트(6)의 상수보류변수 a의 사용식(상수보류 변수가 피연산자인 치환식) 각각에 대하여 a2 내지 a9 단계의 루프가 반복적으로 수행된다. 본 예에서는, 2개의 위치정보 세트 또는 s2 및 s3가 상수보류 변수 a의 상수보류 변수정보내에 저장되어 있으므로, 루프는 2번 수행된다.
a3 단계에서, 상수보류 변수정보 유지 유니트(6)내에 유지된 상수보류 변수의 사용이 상수로 유지될 수 있는 지의 여부가 판단된다. 위치 s2에서 상수보류 변수 a의 사용식이 상수 200로 교체된 후의 표현식은 a1={200}+x이며, s3 위치에서는 b=10000+{200}이다(여기에서 { }내의 값은 재기록에 의하여 발생된 상수를 표시한다). 즉, 위치 s3에서의 연산식내에만, 그 결과가 상수로 유지될 수 있다. 이하, 따라서, s3 위치에서의 상수보류 변수의 연산식상에서만 a4 내지 a8의 처리단계가 수행된다.
a4 단계에서, 프로그램내의 위치 s3이 b=10000+{200}로 재기록되고(상수전파), 상수보류변수 정보유지 유니트(6)내의 상수보류 변수 a의 위치를 포함하는 열의 사용속성이 전파로 설정된다.
a5 단계에서, 프로그램내의 위치 s3가 b={102000}으로 상승된다.
a6 단계에서, 상수보류변수의 정의식이 a5 단계에서의 재기록의 결과로서 신규로 발생되었는가의 여부가 판단된다. 이 경우에, 상수보류변수 b가 치환식 b={10200}에 의해서 신규로 발생되었으며, 따라서 a7 및 a8 단계가 그 후에 수행된다.
a7 단계에서는, a6 단계에서 신규로 발생한 것으로 판단된 정의식에 관한 상수보류 변수정보로서, 상수보류변수 명칭 b 및 상수보류 변수정의 위치 s3 들이 하나의 세트로 묶여진다. 한세트의 상수보류 변수정보로서, 상수유지 변수값 10200이 상수보류 변수정보 유지유니트(6)의 데이타베이스내에 등록된다.
a8 단계에서는, a7 단계에서 신규로 저장된 상수보류변수에 관하여, 그의 사용위치가 프로그램내에서 검색된다. 그 처리는 상술한(2)에서와 동일한 방식으로 수행되고, 따라서 그의 기술은 생략한다.
a9 단계는 루프처리를 수행하도록 a2 단계와 협조한다.
a10 단계는 a1 단계와 협력하여 루프처리를 수행한다. 이 단계에서, 마찬가지로, 상수보류 변수 b의 정의식이 상수보류 변수정보 유지유니트(6)내에 등록된다. 따라서, 처리는 a1 단계로 복귀하고 루프처리가 수행된다. 다시 말해서, 그러한 방식으로 부가된 것을 포함하는 상수보류 변수 b의 모든 정의식에 관해서 a1 내지 a10의 처리가 반복된다.
부분상수식 재기록 유니트(9)의 재기록의 결과로서, 중간언어 프로그램은 제 7b 도에서 나타낸 바와 같이 되고, 상수보류 변수정보 유지유니트(6)내에 유지된 상수보류 변수정보는 제 8b 도에서 나타낸 바와 같이 된다.
(4) 비용판단및 재기록 유니트(10)는 상수보류 변수정보 유지 유니트(6)내에 유지된 상수보류 변수 a 및 b에 대하여 다음의 처리를 수행한다. 제 9 도에서 나타낸 명령어의 세트가 마이크로프로세서의 명령어 세트로 사용되는 것으로 가정한다. 이 경우에, 비용유지 유니트(15)내에 저장된 정보는 제 10 도에서 나타낸 바와 같이 된다.
[상수보류변수 a의 사용의 비용비교및 재기록]
레지스터 변수 정의비용 계산유니트(16)는 상수보류 변수정보 유지유니트(6)로부터 상수보류 변수 a의 정의위치와, 프로그램으로부터 상수보류 변수 a의 정의식을 꺼낸다. 유니트(16)는 비용유지 유니트(15)내에 저장된 패턴에 대하여 식과 위치가 맞는지를 점검하고, 상수보류 변수 a의 정의비용을 꺼낸다. 이 경우에 8 비트보다 크지않는 200이 상수이므로, 크기 2 및 사이클 1이 비용으로서 꺼내진다(제 10 도의 b2 단계및 화살표 c1).
레지스터 변수사용비용 계산유니트(17)는 상수보류변수 정보유지 유니트(6)로부터, 상수보류 변수 a의 사용중, 사용속성이 비전파인 사용위치및 사용위치에서의 상수보류 변수 a의 사용식을 꺼낸다. 유니트(17)는 비용유지 유니트(15)내에 저장된 패턴과 그 위치및 식이 맞는지를 점검하고, 상수보류 변수 a의 사용비용 데이타를 꺼낸다. 이 경우에, 레지스터 변수의 부가가 매칭되고, 크기 1 및 사이클 1이 비용으로서 꺼내진다(제 10 도의 b3 단계및 화살표 c2).
상수사용비용 계산유니트(18)는 상수보류 변수정보 유지유니트(6)로 부터, 상수보류 변수 a의 사용으로부터, 사용속성이 비전파인 사용의 위치및 프로그램으로부터 사용식을 꺼낸다. 유니트(18)는 사용식내의 상수보류 변수가 그의 유지값으로 교체된 상수식이 비용유지 유니트(15)내에 저장된 패턴과 맞는지를 점검하고, 상수보류 변수 a가 상수로 교체된 경우에 사용비용을 꺼낸다. 이 예에서, 식이 레지스터 변수--8-비트 상수의 부가와 맞고, 크기 2 및 사이클 1이 비용으로서 꺼내진다(제 10 도의 b4 단계및 화살표 c3).
재기록 판단 유니트(19)는 레지스터 변수정의비용 계산유니트(16)내에서 계산된 비용및 레지스터 변수사용비용 계산유니트(17)내에서 계산된 비용의 합을 계산한다. 그 합계는 상수사용 비용계산 유니트(18)내에서 계산된 비용과 비교된다(b5 단계) 산수보류 변수 a의 예에서, 레지스터 변수로서 사용될 때,
크기=2+1=3
사이클=1+1=2
이며, 상수로 교체될 때는,
크기=2
사이클=1이다.
즉, 상수 사용비용이 낮다. 따라서, s2 위치에서 연산식의 피연산자로서 사용된 상수보류 변수 a의 사용식이 상수보류 변수 200으로 재기록되도록 재기록 유니트(20)가 작동된다(b5 단계). 결과적으로, 위치 s2에서의 치환식은 a1=200=x로 된다.
[상수보류 변수 b에 대한 비용비교및 재기록]
상수보류 변수 a의 경우와 유사한 방식으로 처리가 시행된다.
그러나, 상수보류변수 b의 경우에는, 상수사용비용이 높아진다. 따라서 재기록 유니트(20)는 작동되지 않는다.
비용판단및 재기록 유니트(10)의 처리결과로서, 프로그램은 제 7c 도에서 나타낸 것과 같이 되고, 상수보류 변수정보 유지 유니트(6)내에 유지된 정보는 제 8c 도에서 나타낸 바와 같이 된다.
(5) 자원할당 유니트는 변수 a, a1, x, b, b1, b2 및 y를 레지스터 또는 메모리에 할당한다. 상수보류 변수들인 변수 a 및 b로서, 상수보류 변수정보 유지유니트(6)의 자원열내에 할당된 자원들(레지스터 또는 메모리)이 설정된다.
(6) 메모리 변수재기록 유니트(12)는 상수보류 변수가 레지스터에 할당되었는지의 여부를 보기 위하여 상수보류 변수 정보유지 유니트(6)내에 유지된 상수유지변수를 점검한다(a2 단계).
[상수보류 변수 b가 레지스터에 할당된 경우]
상수보류변수가 레지스터에 할당된 경우에, 처리가 끝난다. 이 예에서, 상수보류 변수 b는 레지스터에 할당되었으므로, 프로그램은 제 7c 도에서 나타낸 바와 같이 된다.
(8) 만약 상수보류 변수 정보유지 유니트(6)내에 유지된 상수보류 변수의 사용속성이 전파이면, 상수보류 변수정의 검출 유니트(7)는 상수보류 변수정보 유지유니트(7)내에 등록된 상수보류변수 정의 위치의 부분의 내용의 근거하에 프로그램으로부터 상수보류 변수의 정의식을 제거한다.
이 예에서, 만약 상수보류 변수 b가 레지스터에 할당되면, 상수보류 변수정보 유지유니트내의 정보가 제 8d 도에서 나타낸 바와 같이 되고, 상수보류 변수 a만이 정의식의 제거에 처해진다. 따라서, 이 경우에, 상수보류 변수 a의 정의식(프로그램내의 s1 위치)이 제거되고, 그 결과 프로그램은 제 7e 도에서 나타낸 바와 같이 최종적으로 재기록된다.
[상수보류 변수 b가 레지스터에 할당되지 않은 경우]
상수보류 변수 b가 레지스터에 할당되지 않은 경우는, 사용속성이 비전파인지 아닌지를 보기 위하여 상수보류 변수정보의 속성부가 점검된다(c4 단계). 이 예에서는, 제 8c 도에서 나타낸 바와 같이, 사용위치 s4 및 s5에서의 사용속성이 비전파이다. 따라서, 재기록 유니트(24)가 작동되어, 상수보류 변수의 사용이 그의 유지값이 사용으로 재기록된다(c5 단계). 이 예에서는, 상수보류 변수 b가 레지스터에 할당되지 않았으므로, 상수보류 변수정보 유지 유니트내의 정보는 제 8e 도에서 나타낸 바와 같이 되고, 정의식의 제거에 처해질 수 있는 상수유지 변수는 a 및 b가 된다. 이 경우에는, 따라서, 상수보류 변수 a의 정의식(프로그램 내의 s1 위치)및 상수보류 변수 b의 정의식(프로그램내의 s3 위치)이 제거되고, 그 결과 프로그램은 제 7f 도에서 나타낸 바와 같이 최종적으로 된다.
[제 11a 도의 중간언어 프로그램이 처리오브젝트로서 사용된 처리의 예]
이하, 제 11a 도에서 나타낸 프로그램이 입력으로서 최적화장치에 공급된 때에 수행된 처리를 제 2 도및 제 3 도를 참조하여 설명한다.
(1) 상수보류 변수정의 검출유니트(7)는 프로그램내의 위치 s1에서(31)로 표시된 상수보류 변수의 치환식을 검출하고, 상수보류 변수의 명칭 a, 정의위치 s1, 상수보류 변수 값 1000을, 상수보류 변수 정보유지 유니트(6)의 데이타베이스에 등록한다(a7 단계).
(2) 사용식 검출유니트(8)는 프로그램으로부터, 상수보류 변수정보 유지유니트(6)내에 유지된 상수보류 변수 a의 사용위치를 검색하고, 위치 s2에서 사용식을 검출한다. 유니트(8)는 사용위치 s2와, 상수보류 변수 정보유지 유니트(6)의 상수보류 변수 a의 열내의 비전파 사용속성을 등록한다.
유사하게, 위치 s3 및 s4에서의 상수보류 변수 a의 사용식이 탐지되고, 사용위치 s3 및 s4의 사용속성이 비전파로 설정된다(a8 단계).
(3) 부분상수식 재기록 유니트(9)내에서는, 상수보류 변수 a의 사용 s4이 재기록 조건을 만족시키므로, 사용 s4은 제 11b 에서 나타낸 바와 같이 b=20000+10000 및 b=30000으로 재기록된다. 상수보류 변수정보 유지유니트(6)내에서, 상수보류 변수 a의 사용위치 s3의 사용속성은 전파로 설정된다(a5 단계). 이 단계에서, 마찬가지로 상수보류 변수 b도 신규의 상수보류 변수로 되고, 등록된다. 그러나, 이 예에서는, 변수 b의 사용식의 기술이 생략되고, 변수 a만이 기술된다.
(4) 비용판단및 재기록 유니트(10)는 상수보류 변수 정보유지 유니트(6)내에 유지된 상수보류 변수 a에 대하여 다음의 처리를 수행한다. 제 9 도에서 나타낸 명령어 세트가 마이크로프로세서의 명령어로 사용된 것으로 가정한다. 이 경우에, 비용유지 유니트(15)내에 저장된 정보는 제 10 도에서 나타낸 바와 같이 된다.
등록변수 정의비용 계산유니트(16)내에서, 상수보류 변수 a의 정의위치가 상수보류 변수정보 유지유니트(6)로부터, 또한 정의식이 프로그램으로부터 취해진다. 유니트(16)는 위치및 식이 비용유지 유니트(15)내에 유지된 패턴과 맞는지 점검하고, 상수보류변수 a의 정의비용을 취한다. 이 경우에, 10000은 16 비트보다 크지 않은 상수이므로, 크기 3 및 사이클 1이 비용으로 취해진다(b2 단계).
레지스터변수 사용비용 계산유니트(17)내에서, 상수보류 변수 a의 사용위치 가운데서, 사용속성이 비전파인 사용위치가 상수보류 변수 정보유지 유니트(6)로부터, 또한 사용식이 프로그램으로부터 취해진다. 유니트(17)는 비용유지 유니트(15)내에 저장된 패턴과 위치및 식이 맞는지를 점검하고, 상수보류 변수 a의 사용비용을 취한다. 이 경우에, 양자 (s2 및 s3)가 레지스터 변수의 부가에 맞으면, 크기 1 및 사이클 1이 비용으로서 취해진다(b3 단계).
상수사용 비용계산 유니트(18)내에서, 상수보류 변수 a의 사용위치가 사용위치에서의 사용식으로부터 상수보류 변수정보 유지 유니트(6)로부터 취해지고, 사용속성이 비전파인 식이 취해진다. 유니트(18)는 사용식내의 상수보류 변수가 그의 유지값으로 교체된 상수식이 비용유지 유니트(15)내에 저장된 패턴과 맞는지를 점검하고, 상수보류 변수 a가 유지값으로 교체된 경우에 사용비용을 취한다. 이 예에서, 레지스터변수및 16-비트 상수의 부가가 양자 다 맞으면, 크기 4 및 사이클 2가 비용으로 취해진다(b4 단계).
재기록 판단유니트(19)에 있어서는, 레지스터 변수정의 비용 계산유니트(16)내에서 계산된 비용과 레지스터변수 사용비용 계산유니트(17)에서 계산된 비용의 합이 계산된다. 이 합은 상수사용 비용계산 유니트(18)에서 계산된 비용과 비교된다(b5 단계).
상수보류 변수 a의 예에서, 레지스터 변수로 사용되었을 때는,
크기=3+1+1=5
사이클=1+1+1=3이며,
상수로 교체되었을 때는,
크기=4+4=8,
사이클=2+2=4
이다. 따라서, 변수가 레지스터변수로서 사용된 경우의 비용이 낮다. 따라서, 재기록 유니트(20)가 작동되지 않으며 위치 s2 및 s3는 변하지 않고 남아 있는다.
따라서, 제 11a 도의 중간언어 프로그램은 제 11b 도의 형태를 가지는 것으로 변화된다. 제 11b 도에 있어서, 위치 s4에서의 치환식은 b=30000이 되고, 치환식 b=30000의 치환식이 프로그램내에 나타나며, s4 위치에서의 치환식의 변수 b가 신규의 상수보류 변수로 된다.
신규의 상수보류 변수가 전파및 상수폴딩의 결과로 나타날 때, 상수 보류변수 a의 경우에서와 동일한 방식으로, 상수보류 변수 b가 피연산자인 연산식이 검색된다. 3개의 화살표가 변수 b로부터 연장되며, 각각 다른 변수 b에서 끝난다. 화살표는 변수 b가 피연산자로서 사용된 연산식을 나타낸다. 최적화장치는 위치 s9 및 s10에서의 연산식을 검색하고, 연산식내에서 피연산자로서 사용된 상수보류 변수 b를 그의 유지값 30000으로 재기록한다. 이 재기록의 결과로서, 위치 s9 및 s10에서의 연산식이 각각 u=10000+{30000} 및 z={30000}+45000으로 도면에서 나타낸 바와 같이 재기록된다. 이러한 재기록 후, 최적화장치는 상수폴딩을 수행하여, 위치 s9 및 s10에서의 치환식이 u=40000 및 z=75000으로 각각 재기록된다. 이러한 재기록은 변수 u 및 z가 상수보류 변수로 되도록한다. 따라서, 최적화장치는 변수에 대하여 전파및 폴딩을 반복한다. 전파및 폴딩이 이러한 방식으로 반복될 때, 위치 s4, s9, s10에서의 치환식이 프로그램으로부터 제거되고 따라서 프로그램이 매우 단순해진다.
상술한 바와 같이, 재기록 후에, 최적화장치는 상수전파및 상수폴딩을 수행한다. 그 후에, 최적화장치는 프로그램내에 남아있는 변수를 레지스터 또는 메모리에 할당한다. 자원할당에 있어서, 최적화장치는 상호간에 중복된 지속영역을 가지는 변수들을 상이한 레지스터로 할당한다.
프로그램내의 변수 a, x 및 y는 제 11f 도에 나타낸 바와 같이, 상수전파에 의하여 재기록되고, 상수폴딩이 레지스터 d0, d1, d2로 각각 할당되는 것으로 가정한다. 변수 a, x 및 y는 레지스터에 할당되므로, 제 11f 도에서 나타낸 프로그램내의 치환식이, 피연산자가 레지스터인 기계어 명령코드로 변환된다.
제 12 도는 제 11f 도에서 위치 s1 내지 s3에서의 중간언어 프로그램으로부터 발생된 기계어 코드를 나타낸다. 도면에 있어서, movi #10000, do, add d0, d1, 및 add d0, d2는 최적화 후의 중간언어 프로그램의 치환식에 상당한다. 기계어 코드의 우측에는, 메모리의 크기및 수행사이클이 기록된다. 기계어 코드에 있어서, 피연산자는 레지스터로 설정되고, 따라서 add d0, d1은 1의 크기및 1의 수행사이클을 가진다. 만약 기계어 코드가 종래예의 경우에서와 같이 #10000의 중간값을 포함하면, 이들은 제 14 도에서 나타낸 바와 같이 4의 메모리 크기및 4의 수행사이클을 가진다. 따라서, 본 발명의 전파는 낮은 가격의 기계어 프로그램으로 재기록을 수행할 수 있다.
상술한 바와 같이, 본 발명에 따르면, 상수전파및 상수폴딩이 효과적으로 수행되고, 상수전파에 따른 비용의 증가가 방지될 수 있다.
실시예에 있어서, 명령의 크기및 실행시간(사이클의 수)은 비용으로서 병렬로 사용된다. 비교적 적은 크기 또는 짧은 수행시간의 코드가 발생된 코드로서 얻어질 때는, 설정이 수행되어 우선권이 비용으로 넘어간다. 특히, 높은 우선권이 코드 크기로 할당되는 때는, 코드 크기가 비용으로서 제일 먼저 사용되고, 또한, 동일한 크기의 코드가 사용되는 경우, 사이클 수가 상호간에 비교된다. 높은 우선권이 수행속도로 넘어가면, 사이클 수는 비용으로서 제일먼저 사용되고, 동일한 사이클 수의 코드가 사용되면, 코드크기의 비교가 행해진다. 선택적으로, 코드크기 및 사이클수의 어느쪽이 단독으로 사용될 수도 있다. 그러한 정보에 대하여 연산을 수행함으로써 얻어지는 값은 비용으로서 사용될 수 있음은 당연하다.
상술한 바와 같이, 본 발명의 최적화장치에 따르면, 프로그램이 제 1 재기록수단의 재기록에 의하여 단순화될 수 있다. 다른 식의 재기록은 제 1 평가수단의 평가결과가 제 2 평가수단의 평가결과보다 크지 않을 때에만 수행되므로, 상수전파에 기인한 비용의 증가가 방지된다. 비용전파가 이러한 방식으로 넘치는 부분이 프로그램으로부터 제거된다. 따라서, 프로그램의 근거하에 발생된 기계어 프로그램이 매우 효과적이다.
따라서, 상술한 효과에 부가하여, 본 발명의 최적화장치는 다음의 효과를 얻을 수 있다.
모든 피연산자가 상수로 만들어진 식이, 상수식의 연산결과인 상수로 재기록되고, 재기록된 식은 관리수단에 의하여 관리되므로, 상수보류 변수가 제 1 및 제 2 재기록 수단의 재기록에 의하여 신규로 발생될 수 있으며, 상수보류 변수에 의하여 유지된 상수가 전파될 수 있다. 이들 처리가 반복되고, 전파및 폴딩이 순서대로 수행되면, 많은 식이 프로그램으로부터 삭제되고, 따라서 프로그램이 매우 단순해진다. 따라서, 최종적으로 기계어 프로그램으로 준비된 수행시간및 메모리 크기가 크게 줄어든다.
또한, 상술한 효과에 부가하여, 본 발명의 최적화장치는 다음의 효과를 갖는다.
자원할당이, 식들이 제 1, 제 2 및 제 4 재기록수단에 의하여 제거된 프로그램의 변수상에 행해진다. 자원할당의 결과로서 메모리에 할당된 상수보류 변수중에서, 상수보류변수는 메모리로 할당되지 않으며, 상수로 재기록된다. 상수보류 변수가 피연산자인 식및, 상수가 치환된 식에서는, 따라서, 메모리 억세스가 필요없다. 따라서, 메모리 억세스에 상당하는 시간에 의하여 수행시간이 단축된다.
또한, 상술한 효과에 부가하여, 본 발명의 최적화장치는 다음의 효과를 갖는다.
관련식 세트의 유니트내의 기계어 명령의 비용을 평가함으로써 평가가 수행되며, 관련식내의 식이 기계어 명령으로 치환되므로, 비용이 매우 정확하게 평가될 수 있다. 따라서 피연산자가 재기록되어야 하는가의 판단이 매우 정확하게 수행될 수 있다.
비록 본 발명은 바람직한 실시예의 관점에서 기술되었으나, 그러한 기술내용은 한정적인 것이 아니다. 상술한 기술을 읽은 후에는, 다양한 변경및 변형이 가능함은 당업자에게 있어 현저한 사실이다.
따라서, 첨부된 청구범위는 본 발명의 진정한 요지및 범위내에 해당되는 모든 변형및 변경을 포함하는 것으로 해석되어야 한다.

Claims (8)

  1. 프로그래밍 언어로 기록된 프로그램을 기계어 프로그램으로 콤파일하기 위한 콤파일러에 장치되고, 프로그래밍 언어로 기록된 프로그램을 최적화하며 최적화된 프로그램을 출력하는 최적화장치로서; 상수가 상수보류 변수로 치환된 식과 상수보류 변수가 피연산자인 식을 연관시킴으로써, 상수가 상수보류 변수의 관련식 세트로서 치환된 변수인 상수보류 변수를 관리하기 위한 관리수단과; 상수보류 변수가 피연산자인 관련식 세트내의 식중에서, 다른 피연산자가 상수인 식과 상수보류 변수가 피연산자인 단항연산식을, 상수보류 변수에 의하여 유지된 상수가 피연산자인 식으로 재기록하는 제 1 재기록 수단과; 제 1 재기록수단의 재기록이 수행된 후에, 상수로 재기록되지 않은 상수보류 변수가 그 상수보류 변수로 유지된 상수 중간데이타로 교체되고 기계어 연산의 피연산자로서 설정될 때, 상수보류 변수가 피연산자인 식으로부터 생성된 기계어 명령의 코드크기 및/또는 수행 사이클을 평가하는 제 1 평가수단과; 제 1 재기록 수단의 재기록이 수행된 후에, 상수로 재기록되지 않은 상수보류 변수에 의하여 유지된 상수를 저장하는 레지스터가 기계어 연산의 피연산자로서 설정되었을 때, 상수보류 변수의 관련식 세트내에서, 상수가 상수보류 변수로 치환된 식및 상수보류 변수가 피연산자인 식으로부터 생성된 기계어 명령의 코드크기 및/또는 수행 사이클을 평가하는 제 2 평가수단과; 각 관련식 세트에 대한 제 1 평가수단의 평가결과와 제 2 평가수단의 평가결과를 비교하기 위한 비교수단과; 비교수단의 비교결과, 제 1 평가수단의 평가결과가 제 2 평가수단의 평가결과보다 크지 않을 때, 피연산자로서 사용된 상수보류 변수를 상수보류 변수의 상수로 재기록하는 제 2 재기록 수단; 및 상수보류 변수가 연산자로 사용된 식이 상수보류 변수에 의하여 유지된 상수가 피연산자로 사용된 식으로 재기록될 때, 상수가 상수보류 변수로 치환된 식을 삭제하는 제 3 재기록 수단을 포함하여 구성되는 최적화장치.
  2. 제 1 항에 있어서, 제 1 및 제 2 재기록수단에 의하여 수행된 재기록으로 어떠한 피연산자가 상수로 만들어진 식을, 상수식의 연산결과인 식으로 재기록하는 제 4 재기록 수단과; 제 4 재기록 수단에 의하여 수행된 재기록에 의하여 생성된 식내에서 연산결과가 치환되는 신규의 상수보류 변수와, 상수가 상수보류 변수로 치환된 식과, 상수보류 변수가 피연산자로 사용된 식이, 관리수단에 의하여 상수보류 변수의 관련식 세트로서 관리되도록 하는 제어수단; 및 관리수단에 의하여 신규로 관리된 관련식 세트에 대하여 제 1 재기록 수단을 작동시키는 작동수단을 더욱 포함하여 구성되는 최적화장치.
  3. 제 1 항에 있어서, 제 2 재기록 수단에 의하여 수행된 재기록및 삭제후에, 각 변수의 사용빈도및 변수의 지속영역의 중복상태의 근거하에, 프로그램내의 변수를 레지스터 또는 메모리로 할당하는 자원할당수단과; 자원할당수단에 의하여 메모리에 할당된 변수상에서 상수보류 변수의 판단을 수행하고, 판단된 상수보류 변수의 관련식 세트내의 피연산자인 상수보류 변수를 상수로 재기록하는 제 5 재기록 수단을 더욱 포함하여 구성되는 최적화장치.
  4. 제 2 항에 있어서, 제 2 재기록 수단에 의하여 수행된 재기록및 삭제후에, 각 변수의 사용빈도및 변수의 지속영역의 중복상태의 근거하에, 프로그램내의 변수를 레지스터 또는 메모리로 할당하는 자원할당수단과; 자원할당수단에 의하여 메모리에 할당된 변수상에서 상수보류 변수의 판단을 수행하고, 판단된 상수보류 변수의 관련식 세트내의 피연산자인 상수보류 변수를 상수로 재기록하는 제 5 재기록 수단을 더욱 포함하여 구성되는 최적화장치.
  5. 제 1 항에 있어서, 다수개의 기계어 명령및 각 기계어 명령의 코드크기 및/또는 수행 사이클을 나타내는 비용을 저장하기 위한 비용저장수단을 더욱 포함하여 구성되며, 제 1 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 상수보류 변수가 피연산자인 관련식 세트내의 각 식을, 그 식의 상수보류 변수가 그 상수보류 변수에 의하여 유지된 값인 상수를 나타내는 중간데이타로서의 피연산자인 기계어 명령으로 교체하는 제 1 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 1 누산수단을 포함하여 구성되며, 제 2 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 관련식 세트내에서, 상수가 상수보류 변수로 교체된 식과 상수보류 변수가 피연산자인 식을, 상수를 저장하는 레지스터가 피연산자로서 설정되어 있는 기계어 명령으로 교체하는 제 2 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 2 누산수단을 포함하여 구성되는 최적화장치.
  6. 제 2 항에 있어서, 다수개의 기계어 명령및 각 기계어 명령의 코드크기 및/또는 수행 사이클을 나타내는 비용을 저장하기 위한 비용저장수단을 더욱 포함하여 구성되며, 제 1 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 상수보류 변수가 피연산자인 관련식 세트내의 각 식을, 그 식의 상수보류 변수가 그 상수보류 변수에 의하여 유지된 값인 상수를 나타내는 중간데이타로서의 피연산자인 기계어 명령으로 교체하는 제 1 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 1 누산수단을 포함하여 구성되며, 제 2 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 관련식 세트내에서, 상수가 상수보류 변수로 교체된 식과 상수보류 변수가 피연산자인 식을, 상수를 저장하는 레지스터가 피연산자로서 설정되어 있는 기계어 명령으로 교체하는 제 2 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 2 누산수단을 포함하여 구성되는 최적화장치.
  7. 제 3 항에 있어서, 다수개의 기계어 명령및 각 기계어 명령의 코드크기 및/또는 수행 사이클을 나타내는 비용을 저장하기 위한 비용저장수단을 더욱 포함하여 구성되며, 제 1 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 상수보류 변수가 피연산자인 관련식 세트내의 각 식을, 식의 상수보류 변수가 상수보류 변수에 의하여 유지된 상수를 나타내는 중간데이타로서의 피연산자인 관련식내의 각 식을 교체하는 제 1 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 1 누산수단을 포함하여 구성되며, 제 2 평가수단은; 제 1 재기록 수단에 의하여 수행된 재기록 후에, 관련식 세트내에서, 상수가 상수보류 변수로 교체된 식과 상수보류 변수가 피연산자인 식을, 상수를 저장하는 레지스터가 피연산자로서 설정되어 있는 기계어 명령으로 교체하는 제 2 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 2 누산수단을 포함하여 구성되는 최적화장치.
  8. 제 4 항에 있어서, 다수개의 기계어 명령및 각 기계어 명령의 코드크기 및/또는 수행 사이클을 나타내는 비용을 저장하기 위한 비용저장수단을 더욱 포함하여 구성되며, 제 1 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 상수보류 변수가 피연산자인 관련식 세트내의 각 식을, 식의 상수보류 변수가 상수보류 변수에 의하여 유지된 상수를 나타내는 중간데이타로서의 피연산자인 관련식내의 각 식을 교체하는 제 1 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 1 누산수단을 포함하여 구성되며, 제 2 평가수단은: 제 1 재기록 수단에 의하여 수행된 재기록 후에, 관련식 세트내에서, 상수가 상수보류 변수로 교체된 식과 상수보류 변수가 피연산자인 식을, 상수를 저장하는 레지스터가 피연산자로서 설정되어 있는 기계어 명령으로 교체하는 제 2 교체수단; 및 비용저장수단으로부터 각 교체된 기계어명령과 관련된 비용을 판독하고, 판독된 비용을 누산하며, 누산결과를 평가결과로서 설정하는 제 2 누산수단을 포함하여 구성되는 최적화장치.
KR1019960021648A 1995-06-16 1996-06-15 최적화장치 KR100215502B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP15026195A JP3650649B2 (ja) 1995-06-16 1995-06-16 最適化装置
JP95-150261 1995-06-16

Publications (2)

Publication Number Publication Date
KR970002621A KR970002621A (ko) 1997-01-28
KR100215502B1 true KR100215502B1 (ko) 1999-08-16

Family

ID=15493080

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960021648A KR100215502B1 (ko) 1995-06-16 1996-06-15 최적화장치

Country Status (7)

Country Link
US (1) US5842021A (ko)
EP (1) EP0749067B1 (ko)
JP (1) JP3650649B2 (ko)
KR (1) KR100215502B1 (ko)
CN (1) CN1122216C (ko)
DE (1) DE69620057T2 (ko)
TW (1) TW434512B (ko)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6223337B1 (en) * 1997-12-12 2001-04-24 Hewlett-Packard Company Random test generation for compiler optimization
KR100492131B1 (ko) * 1998-04-08 2005-08-01 한국항공우주산업 주식회사 웹 프로그램의 변수 전달 방법
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
JP2002073333A (ja) * 2000-08-25 2002-03-12 Hitachi Ltd 手続き呼び出し先のデータ依存の解析表示方法
US20040003383A1 (en) * 2002-06-28 2004-01-01 Microsoft Corporation Stripping of unnecessary information from source code
US20040095348A1 (en) * 2002-11-19 2004-05-20 Bleiweiss Avi I. Shading language interface and method
US20070006194A1 (en) * 2003-03-10 2007-01-04 Catena Corporation Static analysis method regarding lyee-oriented software
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
JP4377369B2 (ja) * 2005-11-09 2009-12-02 株式会社日立製作所 リソース割当調停装置およびリソース割当調停方法
US20070233745A1 (en) * 2006-03-29 2007-10-04 Ori Pomerantz Data Flow Optimization in Meta-Directories
US7870544B2 (en) * 2006-04-05 2011-01-11 International Business Machines Corporation Insuring maximum code motion of accesses to DMA buffers
FR2902543A1 (fr) 2006-06-20 2007-12-21 Alcatel Sa Procede de creation de contenus multimedia pour terminaux mobiles, produit programme d'ordinateur pour la mise en oeuvre d'un tel procede
US20080250032A1 (en) * 2007-04-04 2008-10-09 International Business Machines Corporation Method and system for efficiently saving and retrieving values of a large number of resource variables using a small repository
US8087012B2 (en) * 2007-08-21 2011-12-27 International Business Machines Corporation Eliminating maximum/minimum operations in loop bounds
JP5165969B2 (ja) * 2007-08-29 2013-03-21 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムのコンパイルのために変数にレジスタを割り付ける技術
US7505963B1 (en) * 2008-01-07 2009-03-17 International Business Machines Corporation Method and system for efficiently saving and retrieving values of a large number of resource variables using a small repository
US20100199269A1 (en) * 2008-02-05 2010-08-05 Panasonic Corporation Program optimization device and program optimization method
US9176845B2 (en) * 2010-03-19 2015-11-03 Red Hat, Inc. Use of compiler-introduced identifiers to improve debug information pertaining to user variables
CN102184090B (zh) * 2011-05-27 2013-12-04 清华大学 一种动态可重构处理器及其固定数的调用方法
JP6481515B2 (ja) 2015-05-29 2019-03-13 富士通株式会社 情報処理装置、コンパイル方法、及びコンパイラプログラム
US11334469B2 (en) * 2018-04-13 2022-05-17 Microsoft Technology Licensing, Llc Compound conditional reordering for faster short-circuiting
CN109145013A (zh) * 2018-08-10 2019-01-04 上海达梦数据库有限公司 一种表达式转换方法、装置、设备及存储介质
JP6950772B2 (ja) * 2020-03-13 2021-10-13 株式会社安川電機 生産システム、制御方法、及びプログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4802091A (en) * 1986-10-31 1989-01-31 International Business Machines Corporation Method for improving the efficiency of arithmetic code generation in an optimizing compiler using the technique of reassociation
JPH01108638A (ja) * 1987-10-21 1989-04-25 Hitachi Ltd 並列化コンパイル方式
JPH0417031A (ja) * 1990-05-10 1992-01-21 Nec Corp 定数値伝播最適化方式
JP3280449B2 (ja) * 1993-03-01 2002-05-13 富士通株式会社 コンパイル装置
US5659754A (en) * 1995-03-31 1997-08-19 Sun Microsystems, Inc. Method and apparatus for an improved optimizing compiler

Also Published As

Publication number Publication date
US5842021A (en) 1998-11-24
EP0749067A2 (en) 1996-12-18
EP0749067A3 (en) 1997-05-14
CN1143774A (zh) 1997-02-26
EP0749067B1 (en) 2002-03-27
TW434512B (en) 2001-05-16
CN1122216C (zh) 2003-09-24
DE69620057T2 (de) 2002-09-05
KR970002621A (ko) 1997-01-28
JPH096627A (ja) 1997-01-10
DE69620057D1 (de) 2002-05-02
JP3650649B2 (ja) 2005-05-25

Similar Documents

Publication Publication Date Title
KR100215502B1 (ko) 최적화장치
Bik et al. Compilation techniques for sparse matrix computations
JP3602857B2 (ja) 多機種対応型情報処理システム、および、方法
JP3220055B2 (ja) 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。
US6427234B1 (en) System and method for performing selective dynamic compilation using run-time information
JP3290567B2 (ja) プロファイル計装方法
JP3707727B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US9798528B2 (en) Software solution for cooperative memory-side and processor-side data prefetching
JP5419325B2 (ja) プログラム・コードを変換するための共用コード・キャッシングの方法および装置
US5202995A (en) Method for removing invariant branches from instruction loops of a computer program
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
EP0838755A2 (en) Binary program conversion apparatus and method
JP4181326B2 (ja) コード最適化のための方法、装置及びプログラム
Chambers et al. Whole-program optimization of object-oriented languages
US20020095667A1 (en) Optimizing compilation by forward store movement
US5923883A (en) Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations
JPH0738158B2 (ja) コード最適化方法およびコンパイラ・システム
US20050138613A1 (en) Method and system for code modification based on cache structure
Ashley The effectiveness of flow analysis for inlining
US20010044930A1 (en) Loop optimization method and a compiler
JP6536266B2 (ja) コンパイル装置、コンパイル方法およびコンパイルプログラム
McIntosh Compiler support for software prefetching
Magnusson et al. Circular reference attributed grammars-their evaluation and applications
Wolf et al. Hybrid cache analysis in running time verification of embedded software
CN114546401A (zh) 基于循环折叠的二进制程序体积优化器

Legal Events

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

Payment date: 20090508

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee