KR100198815B1 - 그래프 분할에 의한 레지스터 할당 방법 - Google Patents

그래프 분할에 의한 레지스터 할당 방법 Download PDF

Info

Publication number
KR100198815B1
KR100198815B1 KR1019960054855A KR19960054855A KR100198815B1 KR 100198815 B1 KR100198815 B1 KR 100198815B1 KR 1019960054855 A KR1019960054855 A KR 1019960054855A KR 19960054855 A KR19960054855 A KR 19960054855A KR 100198815 B1 KR100198815 B1 KR 100198815B1
Authority
KR
South Korea
Prior art keywords
register
graph
preference
partition
divisions
Prior art date
Application number
KR1019960054855A
Other languages
English (en)
Other versions
KR19980036297A (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 정선종
Priority to KR1019960054855A priority Critical patent/KR100198815B1/ko
Publication of KR19980036297A publication Critical patent/KR19980036297A/ko
Application granted granted Critical
Publication of KR100198815B1 publication Critical patent/KR100198815B1/ko

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 필요한 레지스터 수를 Chaitin 방식 보다 작게 하며, 복사문에 의한 변수의 특정 레지스터 선호, 변수 사용 위치에 의한 변수의 특수 기능 레지스터 선호를 단순하며 통일된 체계에서 처리하고, 프로그램 구조를 이용한 레지스터 할당에 있어서도 그래프 분할 정보를 전역적으로 활용하게 하여 프로그램 구조에 따라 레지스터 할당이 진행될 때 전반적인 간섭 관계를 쉽게 파악할 수 있는 그래프 분할에 의한 레지스터 할당 방법에 관해 개시된다.

Description

그래프 분할에 의한 레지스터 할당 방법
본 발명은 그래프 분할에 의한 레지스터 할당 방법에 관한 것으로, 특히 컴파일러의 최적화 과정의 일부인 전역 레지스터 할당 과정을 효과적으로 처리하는 데 있어, 사용 레지스터 수의 최소화 문제 뿐만 아니라, 변수의 특정 레지스터에 대한 선호도 수용과 프로그램 구조를 이용한 레지스터 할당을 효과적으로 처리할 수 있는 그래프 분할에 의한 레지스터 할당 방법에 관한 것이다.
종래 기술은 Chaitin에 의해 시작도니 그래프 컬러링 방식으로 그의 알고리즘은 전역 자료 흐름 분석을 통한 생존 범위 추출, 간섭 그래프 구축, 노드 병합, 그래프 감축 및 컬러링 단계로 진행된다.
변수의 생존 범위를 추출하여 이를 간섭 그래프의 노드로 설정한다. 두 변수의 생존 범위가 겹치면, 서로 간섭한다고 하며 두 변수에 대응하는 두 노드를 엣지(edge)로 연결하여 간섭 그래프를 완성한다. 엣지로 연결된 노드들이 나태내는 변수들은 같은 레지스터를 할당 받을 수 없다, 이를 그래프 컬러링 문제로 표현하면, 같은 색을 가질 수 없다고 말할 수 있다, 즉, 컬러링에 사용되는 색은 실제 레지스터를 나타내며, 착색 수는 레지스터 수를 나타낸다.
그래프 감축은 컬러링 가능 여부를 검사하는 단계로서, 가용 레지스터 수 보다 작은 수의 에지에 연결되어 있는노드들을 제거해 그래프를 감축해 나간다. 진행 주에 모든 노드가 착색수 보다 같거나 많은 수의 에지에 연결되어 있으면 걸러링이 불가능 하다고 판단한다. 이와 같이 컬러링의 착색수 제한을 만족하지 못하는 경우 대피 코드를 삽입한 후 다시 간섭 그래프를 구성하여 그래프 감축을 재시도 한다.
Briggs는 그래프 감축 단계와 컬러링 단계의 일 분담을 재조정하여 대피 코드 삽입을 지연 시킴으로써 Chaitin의 알고리즘을 개선하였다.
이상과 같은 Chaitin 스타일의 레지스터 할당은 프로그램에서 복사에 의한 선호도를 가지는 두 변수의 노드를 하나로 합침으로써 두 변수의 생존 범위가 병합되어 하나의 노드로 간주하게 된다. 생존 범위가 하나로 병합되면 두 변수의 생존 범위가 합쳐져서 길어지게 되며, 간섭 관계도 합쳐져서 간섭하는 변수가 많게되어 대피코드 발생 가능성이 높게 된다. 또한, 노드와 엣지가 변화하게 되므로 그래프 감축전에 간섭 그래프를 재구성하는 추가 작업이 발생하게 된다. 또한 파라미터 레지스터나 리턴 값 레지스터와 같은 특정 용도의 레지스터를 특정 변수에 지정하기 위해 프리-컬러링(pre-coloring)을 사용하는 데, 프리-컬러링은 그래프 감축과는 무관한 작업으로서 레지스터 할당 전 과정을 복잡하게 만들고 있다.
프로그램 구조를 이용한 레지스터 할당은 프로그램의 구조를 파악하여, 수행 회수가 많은 부분부터 레지스터 할당을 수행하는 방식이다. 먼저 프로그램을 트리 구조로 분해하고, 트리의 하부 구조(잎)에 대응되는 부분부터 레지스터를 할당하기 시작한다. 각 부분에 대하여 레지스터 할당 상황을 기록해야 하며, 이를 다른 부분에 대한 레지스터 할당에 참조하여야 한다. 현재까지 알려진 기술에서는 각 부분의 레지스터 할당 상황을 다른 부분에 전달하는 데 복잡한 데이터 구조를 사용하고 있다.
따라서, 본 발명은 필요한 레지스터 수를 Chaition 방식 보다 작게 하며, 복사문에 의한 변수의 특성 레지스터 선호, 변수 사용 위치에 의한 변수의 특수 기능 레지스터 선호를 단순하며 통일된 체계에서 처리하고, 프로그램 구조를 이용한 레지스터 할당에 있어서도 그래프 분할 정보를 전역적으로 활용하게 하여 프로그램 구조에 따라 레지스터 할당이 진행될 때 전반적인 간섭 관계를 쉽게 파악할 수 있는 그래프 분할에 의한 레지스터 할당 방법을 제공하는 데 그 목적이 있다.
상술한 목적을 달성하기 위한 본 발명에 따른 그래프 분할에 의한 레지스터 할당 방법은 레지스터 할당의 대상이 되는 모든 변수에 대해 변수들의 생존 범위 정보를 구하는 전역 자료 흐름 분석 단계와, 상기 생존 범위 정보를 이용하여 그래프를 구축하는 간섭 그래프 구측 단계와, 상기 레지스터 간섭 그래프의 노드를 그래프 분할 휴리스틱을 이용하여 독립 집합으로의 분할을 시도하여 실패하며 대피 코드를 삽입하고, 간섭 그래프를 재 조정하여 다시 로드하기 위한 그래프 분할 단계와, 상기 레지스터 간섭 그래프의 노드를 그래프 분할 휴리스틱을 이용하여 독립집합으로의 분할을 시도하여 성공하며 실제 레지스터를 변수에 배정한 후 종료하는 단계로 이루어진 것을 특징으로 한다.
또한, 본 발명은 간섭 그래프를 입력으로 하여 분할된 결과를 출력하고 레지스터의 선호도를 조사하는 단계와, 상기 조사 결과에 따라 할당 대상이 되는 노드들의 순서를 결정하는 단계와, 상기 결정에 따라 노드들을 할당할 순서 리스트에 저장한 후 분할에 할당할 노드들의 집합 여부를 확인하는 단계와, 상기 확인결과에 따라 분할에 할당할 노드들이 집합이 있을 경우 다시 하드 레지스터에 대한 선호도 존재 여부를 확인하는 단계와, 상기 확인결과 하드 레지스터에 대한 선호도가 존재하면 이를 파악하여 레지스터 선호도가 있는 노드를 해당 분할에 재 배치하는 단계와, 상기 확인결과 하드 레지스터에 대한 선호도가 존재하지 않으면 복사문에 의해 선호도를 가지는 노드가 리스트에 존재하는지를 확인하는 단계와, 상기 확인결과 리스트에 존재하면 복사문 선호도가 있는 노드를 분할한 후 어떤 분할에도 포함 시킬 수 없음을 확인하여 해당 분할에 할당하거나 복사문 선호도를 가지는 노드를 위해 새로운 분할을 생성하여 해당 분할에 할당하는 단계와, 상기 확인결과 리스트에 존재하지 않으면 일반적인 분할을 한 후 어떤 분할에도 포함 시킬 수 없음을 확인하여 해당 분할에 할당하거나 새로운 분할을 생성하여 해당 분할에 할당하는 단계와, 상기 확인결과 하드 레지스터에 대한 선호도가 존재하지 않으면 분할된 수가 실제 레지스터 수 보다 많은지를 확인하는 단계와, 상기 확인결과 분할된 수가 실제 레지스터 수보다 많으면 선호도를 고려한 대피 코드를 처리하고, 이후 대피 코드 삽입한 후 생존 범위를 계산하여 새로운 그래프를 구성한 후 해당 분할에 할당 하는 단계와, 상기 확인결과 분할된 수가 실제 레지스터 수 보다 많지 않으면 레지스터를 배정한 후 종료하는 단계로 이루어진 것을 특징으로 한다.
또한, 본 발명은 프로그램의 한 단위 영역을 부 영역으로 분할하고, 현 영역에서는 참조되고 부 영역에서는 참조되지 않는 변수에 대해 분할 한후 분할한 수가 레지스터 수 보다 큰지를 확인하는 단계와, 상기 확인 결과 분할한 수가 레지스터 수보다 작으면 바로 대피리스트에 노드가 존재 하는지를 확인하고, 분할한 수가 레지스터 수 보다 크면 많은 수 만큼 분할을 이동시키고, 옮기지 못한 노드를 대피 리스트에 유지한 후 대피 리스트에 노드가 존재 하는지를 확인하는 단계와, 상기 대피 리스트에 노드가 존재하면 부 영역에서 참조되지 않음을 확인하고, 존재하지 않으면 분할의 수가 실제 사용 가능한 레지스터 수 보다 큰지를 확인하는 단계와, 상기 부 영역에서 참조되지 않았으면 해당 변수를 해당 부 영역에서 대피하고, 분할 조정을 한 후 다시 상기 대피 리스트에 노드가 존재 하는지를 확인하는 단계와,상기 부 영역에서 참조 되었으면 상기 분할의 수가 실제 사용 가능한 레지스터 수보다 큰지를 확인하는 단계와, 상기 확인 결과 분할한 수가 실제 사용 가능한 레지스터 수보다 작으면 바로 종료하고, 크면 수행 빈도가 높은 하위 영역에서 참조된 변수를 대피한 후 종료하는 단계로 이루어진 것을 특징으로 한다.
본 발명이 기존의 레지스터 할당 방식과 근본적으로 다른 점은 기존의 방식이 변수에 레지스터를 지정하는 것과는 반대로 실제 레지스터를 나타내는 분할을 설정 한 후, 변수들을 각 분할에 배치하는 데에 있다. 변수를 분할에 배치하는 과정에서 필요한 레지스터 수, 대피 코드 발생 예상, 변수의 특정 레지스터 선호 만족 여부를 동시에 검사할 수 있다. 또한 , 변수를 분할에 배치할 때에도 순서를 정하여 수행하는 데, 특정 레지스터에 대한 선호가 없는 변수들도 간섭 관계가 없는 경우 특수 목적의 레지스터에 배치할 수 있게 되며, 대피 코드 삽입 시에도 특수 용도 레지스터에 배치된 변수들을 다른 분할로 옮기지 않아도 된다.
제1도는 본 발명이 적용되는 시스템의 구성도.
제2도는 그래프 분할에 의한 레지스터 할당 흐름도.
제3도는 그래프 분할에 의해 선호도를 고려한 레지스터 할당 흐름도.
제4도는 선호도를 고려한 대피 코드 처리 흐름도.
제5도는 그래프 분할 방법 적용시 프로그램 구조 트리를 이용하는 흐름도.
* 도면의 주요부분에 대한 부호의 설명
1 : 프로세서 2 : 정수 연산기
3 : 부동 소수점(FP)연산기 4 : 버스
5 : 레지스터 파일 6 : 로드/스토어 유니트
7 : 명령어 캐쉬 8 : 컴파일러
9 : 전처리기 10 : 구문 분석기
11 : 자료 흐름 분석기 12 : 전역 최적화기
13 : 레지스터 할당기 14 : 어셈블리기
15 : 목적 코드 16 : 시스템의 레지스터 파일
17 : 시스템의 자원을 이용
본 발명의 구성은 레지스터 할당 방법에 있어서, 그래프 분할 방식을 사용하는 구성을 바탕으로 이를 선호도를 고려한 레지스터 할당에 적용하는 방법, 선호도를 고려하여 대피 코드를 처리하는 방법, 그리고 그래프 분할 방법 적용시 프로그램 구조 트리를 이용하는 방법으로 구성된다.
이하, 첨부된 도면을 참조하여 본 발명을 상세하게 설명한다.
제1도은 본 발명이 적용되는 시스템의 구성도이다. 제1도을 참조하여 그래프 분할에 의한 레지스터 할당이 적용되는 시스템의 구성을 설명하면 다음과 같다.
본 발명이 적용되는 시스템은 전형적인 RISC 형 프로세서(1)이다. 프로세서 내에서는 하나 이상의 기능 단위 연산기를 사용 할 수 있으며, 이 중 주로 레지스터 파일을 사용하는 연산기는 정수 연산기(2)와 부동 소숫점(FP) 연산기(3)이다. 많은 데이터를 처리하기 위해 명령어 캐쉬(7) 및 대역폭이 넓은 데이터 버스를 사용하며 로드/스토어 Load/Store) 기능 단위(6)가 메모리 접근을 처리할 수 있다. 정수 연산 및 부동 소숫점 등의 연산을 위하여 레지스터 파일(5)과 버스(4)를 사용한다.
이러한 구조의 시스템 장치들을 사용하기 위하여 응용 프로그램들은 컴파일러를 사용(8)한다. 컴파일러에서 처리되는 과정들을 살펴보면, 소스 프로그램을 입력으로 하여 전처리기 과정(9)을 거친 프로그램은 구문 분석기(10)에서 구문의 오류를 점검하게 된다. 다음, 자료 흐름 분석기(11)에서는 레지스터 할당에 필요한 기본 블럭 정보 및 생존 범위 정보를 구하며, 이러한 정보 분석 후 전역 최적화기(12)에서 최적화 과정을 거친다. 최적화 과정의 일부인 레지스터 할당은 레지스터 할당기(13)에서 수행되며, 시스템의 레지스터 파일(16)이용에 대하여 본 발명이 적용된다. 레지스터 할당을 마친 코드는 어셈블리(14)에 의해 목적 코드를 (15) 생성하고 이 코드들은 시스템의 자원을 이용(17)하게 된다.
제2도는 그래프 분할에 의한 레지스터 할당 흐름도이다. 제2도를 참조하여 그래프 분할에 의한 레지스터 할당을 위한 제어의 흐름을 설명하면 다음과 같다.
그래프 분할에 의한 레지스터 할당 방법은 변수를 나타내는 n개의 노드를 갖는레지스터 간섭 그래프를 k개의 실제 레지스터에 해당하는 독립 집합으로 분할을 시도하여 각 변수를 실제 레지스터에 사상하는 방식이다. 즉, 그래프 감축을 이용한 컬러링 방식은 변수에 색이 나타내는 실제 레지스터를 할당한 것에 반해 그래프 분할을 이용한 방식은 각 실제 레지스터를 나타내는 분할에 변수를 배치하는 차이가 있다 . 그래프 분할에 의한 레지스터 할당 방법은 전역 자료 흐름 분석, 간섭 그래프 구측, 그래프 분할 과정으로 나누어진다.
전역 자료 흐름 분석 단계(21)에서는 레지스터 할당의 대상이 되는 모든 변수에 대해 변수들의 생존 범위 정보를 구한다.
간섭 그래프 구축 단계(22)에서는 생존 범위 정보를 이용하여 그래프를 구축하는데, 노드는 중간 코드 상에서의 변수를 나타내며, 노드 사이의 에지는 해당하는 두 변수의 생존 범위가 중첩됨을 나타낸다. 이 엣지로 인하여 두 노드는 같은 레지스터를 할당 받을 수 없게 된다.
그래프 분할 단계(23)에서는 레지스터 간섭 그래프의 n개의 노드를 그래프 분할 휴리스틱을 이용하여 k 개의 독립 집합으로의 분할을 시도한다. 이때, 레지스터 간섭 그래프의 분할 과정에서 만들어진 독립 집합의 개수가 p라 하면 p 가 k보다 작거나 같은 경우 k색 분할에 성공(26)한 것이고, p가 k보다 크다면(27) 변수의 일부를 대피 시키게 된다. 대피 된 노드는 정의된 시점에 대피 코드가 삽입(24)되게 되고, 사용하기 위해서 다시 로드(load) 하게 된다.
이로 인해 중간 코드 상의 변수에 따르는 본래의 생존 범위가 나뉘게 되고, 나뉜 생존 범위마다 새로운 노드를 생성하게 되어 이 노드들에 그래프의 분할 알고리즘을 적용하여 존재하고 있는 분할들에 포함될 수 있는지 조사하게 된다. 새로운 노드들이 생성되었으므로 노드와 엣지 집합이 변화되어 그래프가 재 구성되게 되는데, 본래의 노드 중 대피 되었던 노드르과 간섭 관계가 있었던 노드들만 간섭 관계를 조정해 주면 된다(28). 따라서 대피 코드 삽입(24)과 간섭 그래프 재구성(28)에 있어서도 성능 향상을 기대할 수 있다.
이러한 과정을 반복하여 k색 분할에 성공(26)하면 분할 알고리즘 수행이 종료되게 되고 실제 레지스터가 변수에 배정(25)된다.
제3도은 그래프 분할에 의해 선호도를 고려한 레지스터 할당 흐름도이다. 제3도을 참조하여 선호도를 고려한 그래프 분할 방법을 적용시키는 제어의 흐름을 설명하면 다음과 같다.
선호도를 고려한 레지스터 할당 방법은 간섭 그래프를 입력(31)으로 받아들여 분할된 결과를 출력한다. 먼저 레지스터의 선호도를 조사(32)하여 분할시 고려할 수 있게 하는데, 파라미터 레지스터와 리턴 값 저장용 레지스터와 같은 하드 레지스터에 대한 선호도와 단순 복사문에 의한 선호도에 대해 조사하고, 그 관계를 선호도 리스트에 저장하게된다. 파라미터 레지스터에 대한 선호도는 함수 호출이 나타나는 경우에 조사하게 되고, 복사에 의한 선호도의 조사는 단순 복사문이 나타날 때 수행된다.
다음 할당 대상이 되는 노드들의 순서를 정해주게 된다(33). 특수 용도의 레지스터에 대한 선호도를 가지는 변수를 우선적으로 배치하도록 순서를 정한다. 단순 복사문에 의해 선호도를 가지는 노드들은 먼저 할당할 경우 선호도를 가지는 노드들이 한 분할에 포함된 후 다른 노드들을 할당하므로 분할 수가 줄어들 수 있으나, 대피 코드 삽입 시 선호도를 가지는 노드들을 다른 분할로 이동시킴으로써 너무 많은 비용을 유발하게 되어 불리하므로 선호도를 가지지 않는 노드들을 면저 분할에 할당 하도록 순서를 정하게 된다.
노드들을 할당할 순서 리스트에 저장한 후 분할에 할당할 노드들의 집합 여부(34)를 점검하고, 있을 경우 다시 하드 레지스터에 대한 선호도 존재 여부(35)를 점검한다. 하드 레지스터에 대한 선호도가 존재하면 이를 파악하여 레지스터 선호도가 있는 노드를 해당 분할(36)에 배치한다. 다음 복사문에 의해 선호도를 가지는 노드에 대해 점검하고(37), 해당 노드와 선호도 관계에 있는 노드들이 연결되어 있는 리스트를 차례대로 참조하면서 해당 분할의 모든 노드와 복사문에 의해 해당 노드와 선호도를 가지는 모든 노드들이 간섭 관계가 전혀 없는지 조사하여, 간섭 관계가 없는 분할에 복사문에 의한 선호도를 가지는 리스트에 포함된 모든 노드를 해당 분할에 할당(38)하게 된다. 기존의 분할을 모두 조사(39)한 후에도 노드를 할당할 분할을 발견하지 못한 경우에는 새로운 분할을 생성(40)해야 한다.
레지스터와 선호도 관계에 있지 않은 노드이거나 선호도 관계에 있는 하드 레지스터에 해당하는 분할에 할당이 불가능한 경우는 특수 용도 레지스터에 해당하지 않는 일반적인 분할에 배치(41)하게 된다. 일반적인 분할에 배치하는 경우, 우선 기존의 모든 분할에 대해 포함될 수 있는지 여부(42)를 조사하여야 한다. 기존의 분할을 모두 조사 한 후에도 노드를 할당할 분할을 발견하지 못한 경우에는 새로운 분할을 생성(43)해야 한다.
할당의 후보인 모든 노드에 대해 할당이 끝나면 분할의 개수와 사용 가능한 실제 레지스터의 수를 비교(44)하여 분할의 개수가 레지스터 수 이하이면 각 분할의 노드들에 해당되는 그 분할이 나타내는 레지스터를 할당(49)하고 종료하게 된다.
분할의 갯수가 많은 경우 레지스터 수보다 많은 분할에 할당되어 있는 노드를 중 다른 분할에 할당 가능한 노드들은 다른 분할로 옮기고, 다른 분할에 할당이 불가능한 노드들은 대피(45)시키게 된다. 노드들을 대피시키게 되면 일부 변수들의 생존 범위가 변화하여 그로 인해 간섭 관계나 노드들의 변화가 생기게 된다. 변화한 그래프에서 새로 발생한 노드를 즉, 대피 코드 삽입(46)에 의해 생존 범위가 변화한 변수들에 대해 생존 범위를 다시 계산하고(47), 새로운 그래프를 구성(48) 하여 이 변수들을 다시 할당 후보로 하여 할당할 노드가 없어질 때 까지 이 흐름을 반복하게 된다.
제4도는 그래프 분할에 의해 선호도를 고려한 대피 코드 처리 흐름도이다. 제4도를 참조하여 선호도를 고려하여 그래프 분할 방법을 이용한 대피 코드 처리를 위한 제어의 흐름을 설명하면 다음과 같다.
대피 코드 처리의 시작 단계(49)에서는 그래프 분할 알고리즘의 결과로 생성된 분할의 갯수 m, 사용 가능한 실제 레지스터로 특수 용도로 쓰여서 하드 레지스터 선호도를 가지게 된 레지스터의 갯수 cnt를 포함한 개수 k를 입력으로 한다. 실제 레지스터 수보다 많은 수의 분할이 생성되었을 경우 m-k개의 분할에 대해서는 해당되는 레지스터가 없으므로 분할의 개수를 m-k 개만큼 줄여야 한다. m-k 개의 분할을 대피시키는 경우 대피시킬 분할의 개수가 특수 용도 레지스터 이전에 배치된 분할의 수인 k-cnt 보다 작으면(50) 앞에 있는 m-k개의 분할을 대피(54) 시킨 후 종료 (55) 하게 된다.
대피시킬 분할의 수가 k-cnt 보다 큰 경우에는 앞에 배치된 n-k 개의 분할을 대피 시키는 경우 선호도를 가지는 분할을 대피시키게 되며, 이때 포함되어 있던 노드들이 다른 분할로 옮겨지면서 하드 레지스터에 대한 선호도를 않게 된다(51). 이런 경우에는 전체 m개의 분할 중 특수 용도의 분할 앞에 배치되어 있는 k-cnt 개의 분할을 먼저 대피(52)시킨 후 특수 용도의 분할 뒤에 배치되어 있는 분할들 중에서 m+cnt-2*k개의 분할을 대피(53)시킨 후 종료(55)하게 된다.
제5도는 그래프 분할 방법 적용시 프로그램 구조 트리를 이용하여 처리하는 흐름도이다. 제5도를 참조하여 그래프의 분할시 프로그램 구조 트리를 이용하는 제어의 흐름을 설명하면 다음과 같다.
그래프의 분할 시 프로그램의 트리 구조를 이용하기 위해 우선 첫 단계에서는 하위 구조부터 간섭 관계를 계산하고 각 영역에서 분할에 변수들이 할당된 결과와 전역변수와의 간섭 관계를 부모 영역으로 전달하게 된다. 다음 단계에서는 상위 단계로부터 대피시켜야 할 분할이 있는지 조사하여 대피시키게 되고 그 정보를 이용하여 하위 구조에서도 대피 코드나 로드(load), 복사문 등을 삽입하게 된다.
우선, 프로그램 구조 트리를 이용하기 위해 프로그램의 한 단위 영역을 입력(56)으로 하여 하위 구조로부터 상위 구조로 레지스터 할당을 수행하기 위해 부 영역으로 분할(57)한다. 이 부분에 의해 가장 하위 영역에서부터 레지스터 할당이 수행되게 된다. 해당 영역에서 참조되는 변수들을 분할에 포함시키는 과정은 하위 영역에서 이미 할당한 변수를 포함하지 않기 위해 현재의 영역에서 참조되면서 하위 영역서 참조되지 않은 변수들에 대해서만 분할(58)을 수행하게 된다. 분할의 수가 레지스터 수보다 클 경우(59), 그 많은 수 만큼의 분할을 없애야 하는데, 없앨 분할의 모든 노드를 대피시키는 것은 비 효율적이므로 다른 분할로 옮길 수 있는 변수들은 다른 분할로 옮기고(60), 옮길 수 없는 변수들은 대피 리스트에 포함시켰다가(61)한번에 대피시키게 된다. 대피시킬 분할을 선택한 이후에는 어떤 방법으로 포함된 노드들을 대피시킬지 결정해야 한다. 우선, 대피시킬 각 분할에 대해 포함되어 있는 노드들을 대피시키지 않고 다른 분할로 옮길 수 있는 가능성에 대해 조사한다.
노드를 옮기는 방법은 그래프 분할 시와 마찬가지로 고려중인 분할에 이미 포함되어 있는 노드들과 옮기려고 하는 노드 사이에 간섭 관계가 있는지 조사하는 것이다. 간섭 관계가 존재하지 않으면 고려 중인 분할에 노드를 포함 시킬 수 있고 모든 분할에 대해 간섭 관계가 있으면 그 노드는 대피시키게 된다.
대피 리스트에 있는 노드들(62), 즉 대피시킬 변수들에 대한 처리로서 하위 영역에서 참조되지 않는 변수가 있다면(63), 그 하위 영역에 대해서 해당 변수를 대피(64)시키는 것이다. 하위 영역에서의 대피가 발생하게 되면 간섭 관계가 변화하게 되는데, 대피시킨 변수와 간섭 관계에 있던 변수들에 대해 간섭 관계를 변화시키고 다시 분할의 조정(65)이 가능한지 조사하게 된다. 이러한 과정을 마친 후에도 분할의 수가 사용 가능한 실제 레지스터의 수보다 크다면(66) 수행 빈도가 높은 하위영역에서 참조된 변수라도 대피(67)시킨 후 종료(68)하게 된다.
상술한 바와 같이 본 발명은 그래프 분할 방식으로 Chaitin의 전역 자료 흐름 분서, 간섭 그래프 구축, 노드 병합, 그래프 감축, 대피 코드 삽입, 간섭 그래프 재구축 등의 순서로 진해되는 그래프 감축에 의한 컬러링 방법에만 의존해오던 레지스터 할당에 그래크 분할 방법을 도입함으로써 좀 더 효과적인 레지스터 할당을 수행할 수 있다. 특수 용도 레지스터 처리와 같은 제한의 해결이나 선호도 처리시 해당하는 분할에 대한 정보를 알 수 있으므로 프리-컬러링(pre-coloring)과 같은 기법을 사용하거나 노드를 병합하여 그래프를 재 구성하는 복잡한 수행을 하지 않고도 좋은 효과를 볼 수 있으며, 대피 코드 삽입시에도 전체적인 간섭 그래프의 구성이 아닌 일부의 조정만으로 가능하게 된다.

Claims (4)

  1. 레지스터 할당의 대상이 되는 모든 변수에 대해 변수들의 생존 범위 정보를 구하는 전역 자료 흐름 분석 단계와, 상기 생존 범위 정보를 이용하여 그래프를 구축하는 간섭 그래프 구축 단계와, 상기 레지스터 간섭 그래프의 노드를 그래프 분할 휴리스틱을 이용하여 독립 집합으로의 분할을 시도하여 실패하면 대피 코드를 삽입하고, 간섭 그래프를 재 조정하여 다시 로드하기 위한 그래프 분할 단계와, 상기 레지스터 간섭 그래프의 노드를 그래프 분할 휴리스틱을 이용하여 독립 집합으로의 분할을 시도하여 성공하면 실제 레지스터를 변수에 배정한 후 종료하는 단계로 이루어진 것을 특징으로 하는 그래프 분할에 의한 레지스터 할당 방법.
  2. 그래프 분할에 의한 레지스터 할당 방법에 있어서, 간섭 그래프를 입력으로 하여 분할된 결과를 출력하고 레지스터의 선호도를 조사하는 단계와, 상기 조사 결과에 따라 할당 대상이 되는 노드들의 순서를 결정하는 단계와, 상기 결정에 따라 노드들을 할당할 순서 리스트에 저장한 후 분할에 할당할 노드들의 집합 여부를 확인하는 단계와, 상기 확인결과에 따라 분할에 할당할 노드들의 집합이 있을 경우 다시 하드 레지스터에 대한 선호도 존재 여부를 확인하는 단계와, 상기 확인결과 하드 레지스터에 대한 선호도가 존재하면 이를 파악하여 레지스터 선호도가 있는 노드를 해당 분할에 재 배치하는 단계와, 상기 확인결과 하드 레지스터에 대한 선호도가 존재하지 않으면 복사문에 의해 선호도를 가지는 노드가 리스트에 존재하는지를 확인하는 단계와, 상기 확인결과 리스트에 존재하면 복사문 선호도가 있는 노드를 분할한 후 어떤 분할에도 포함시킬 수 없음을 확인하여 해당 분할에 할당하거나 복사문 선호도를 가지는 노드를 위해 새로운 분할을 생성하여 해당 분할에 할당하는 단계와, 상기 확인결과 리스트에 존재하지 않으면 일반적인 분할을 한 후 어떤 분할에도 포함시킬 수 없음을 확인하여 해당 분할에 할당하거나 새로운 분할을 생성하여 해당 분할에 할당하는 단계와, 상기 확인결과 하드 레지스터에 대한 선호도가 존재하지 않으면 분할된 수가 실제 레지스터 수 보다 많은지를 확인하는 단계와, 상기 확인결과 분할된 수가 실제 레지스터 수 보다 많으면 선호도를 고려한 대피 코드를 처리하고, 이후 대피 코드 삽입한 후 생존 범위를 계산하여 새로운 그래프를 구성한 후 해당 분할에 할당하는 단계와, 상기 확인결과 분할된 수가 실제 레지스터 수 보다 많지 않으면 레지스터를 배정한 후 종료하는 단계로 이루어진 것을 특징으로 하는 그래프 분할에 의한 레지스터 방법.
  3. 제2항에 있어서, 상기 선호도를 고려한 대피 코드 처리 방법은 대피 시킬 분할의 갯수가 특수용도 레지스터 이전에 배치된 분할의 수 보다 큰지를 확인하는 단계와, 상기 확인결과 특수 용도 레지스터 이전에 배치된 분할의 수 보다 작으면 분할의 갯수에서 사용 가능한 레지스터 수를 감한 수의 분할을 대피한 후 종료하는 단계와, 상기 확인결과 특수 용도 레지스터 이전에 배치된 분할의 수 보다 크면 선호도에 있는 하드 레지스터 이후에서 대피 될 분할 수를 계산하고, 전체 분할 중 특수 용도 레지스터 이전에 배치된 분할의 수 만큼 분할을 대피하며, 선호도 있는 하드 레지스터 이후에서 대피 될 분할 수 만큼의 분할을 대피한 후 종료하는 단계로 이루어진 것을 특징으로 하는 그패프 분할에 의한 레지스터 할당 방법.
  4. 그래프 분할에 의한 레지스터 할당 방법에 있어서, 프로그램의 한 단위 영역을 부 영역으로 분할하고, 현 영역에서는 참조되고 부 영역에서는 참조되지 않는 변수에 대해 분할 한후 분할한 수가 레지스터 수 보다 큰지를 확인하는 단계와, 상기 확인 결과 분할한 수가 레지스터 수보다 작으면 바로 대피리스트에 노드가 존재 하는지를 확인하고, 분할한 수가 레지스터 수 보다 크면 많은 수 만큼 분할을 이동시키고, 옮기지 못한 노드를 대피 리스트에 유지한 후 대피 리스트에 노드가 존재 하는지를 확인하는 단계와, 상기 대피 리스트에 노드가 존재하면 부 영역에서 참조되지 않음을 확인하고, 존재하지 않으면 분할의 수가 실제 사용 가능한 레지스터 수보다 큰지를 확인하는 단계와, 상기 부 영역에서 참조되지 않았으면 해당 변수를 해당 부 영역에서 대피하고, 분할 조정을 한 후 다시 상기 대피 리스트에 노드가 존재 하는지를 확인하는 단계와, 상기 부 영역에서 참조 되었으면 상기 분할의 수가 실제 사용 가능한 레지스터 수보다 큰지를 확인하는 단계와, 상기 확인 결과 분할한 수가 실제 사용 가능한 레지스터 수보다 작으면 바로 종료하고, 크면 수행 빈도가 높은 하위 영역에서 참조된 변수를 대피한 후 종료하는 단계로 이루어진 것을 특징으로 하는 그래프 분할에 의한 레지스터 할당 방법.
KR1019960054855A 1996-11-18 1996-11-18 그래프 분할에 의한 레지스터 할당 방법 KR100198815B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019960054855A KR100198815B1 (ko) 1996-11-18 1996-11-18 그래프 분할에 의한 레지스터 할당 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019960054855A KR100198815B1 (ko) 1996-11-18 1996-11-18 그래프 분할에 의한 레지스터 할당 방법

Publications (2)

Publication Number Publication Date
KR19980036297A KR19980036297A (ko) 1998-08-05
KR100198815B1 true KR100198815B1 (ko) 1999-06-15

Family

ID=19482237

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960054855A KR100198815B1 (ko) 1996-11-18 1996-11-18 그래프 분할에 의한 레지스터 할당 방법

Country Status (1)

Country Link
KR (1) KR100198815B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100597414B1 (ko) * 2004-10-21 2006-07-05 삼성전자주식회사 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
CN113742080B (zh) * 2020-09-10 2024-03-01 吕戈 一种高效的不可变对象执行环境的构建方法及装置

Also Published As

Publication number Publication date
KR19980036297A (ko) 1998-08-05

Similar Documents

Publication Publication Date Title
US8266603B2 (en) Technique for allocating register to variable for compiling
US7784039B2 (en) Compiler, compilation method, and compilation program
US6173444B1 (en) Optimizing compilation of pointer variables in the presence of indirect function calls
Paleczny et al. The java {HotSpot™} server compiler
US6131189A (en) System and method to efficiently represent aliases and indirect memory operations in static single assignment form during compilation
Chow et al. Effective representation of aliases and indirect memory operations in SSA form
US5920723A (en) Compiler with inter-modular procedure optimization
KR100302980B1 (ko) 그래프컬러링레지스터할당기에대한지역문맥스필링을위한시스템
US6249910B1 (en) Apparatus and method for incrementally update static single assignment form for cloned variable name definitions
US20070250827A1 (en) Apparatus for supporting program development, and operation method for the apparatus
US5790867A (en) Compiler with extended redundant copy elimination
JPH0922362A (ja) コンピュータシステムおよびコンピュータ制御方法
US20190171426A1 (en) Program compiler and linker, and method
JP4638484B2 (ja) データ処理装置におけるデータ整合性
US20070277166A1 (en) Method and apparatus for performing versioning for loop, method and apparatus for collecting array range check information in basic blocks, method for modifying array range check information, method for optimizing array range checks, method for generating codes for array range checks, method and apparatus for eliminating redundant array range checks, method for selecting array range checks, method for modifying array range checks, method for collecting array range checks, and method for determining handling of array range checks
US5367696A (en) Register allocation technique in a program translating apparatus
US8458679B2 (en) May-constant propagation
Barwell et al. Finding parallel functional pearls: Automatic parallel recursion scheme detection in Haskell functions via anti-unification
US10013244B2 (en) Apparatus and method to compile a variadic template function
JPH0926884A (ja) バイナリ操作を必要とするタスク中に必要なフロー情報を使用可能とする方法および装置
KR100198815B1 (ko) 그래프 분할에 의한 레지스터 할당 방법
US6009272A (en) Register allocation via selective spilling
CN1191527C (zh) 生成稀疏干扰图的装置与方法
US5937196A (en) Compiling with partial copy propagation
US6820253B1 (en) Method and system for interprocedural analysis with separate compilation

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: 20080303

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee