QBE - 컴파일러 백엔드: 버전 1.3
1 week ago
5
- 성능 최적화가 크게 추가되어 QBE 1.3은 vanilla coremark에서 상용 컴파일러 성능의 63% 이상을 기록하고, Hare 테스트 스위트에서는 qbe-1.2 대비 33% 개선됨
- QBE 1.3은 1.0 이후 가장 큰 릴리스로, 약 7k 줄 추가와 1.5k 줄 삭제가 포함됨
- 새 최적화에는 GVN/GCM, 루프 최적화, if 제거, CFG 단순화 등이 포함됐지만, 검증된 일부 패스만 유지됨
- 인라이닝은 QBE의 함수 단위 스트리밍 컴파일 모델과 맞지 않는 문제가 있어 이번 최적화 세트에서 제외됨
- ee_isdigit를 인라인하고 crcu8를 더 단순한 분기 없는 구현으로 바꾼 coremark 변형에서는 QBE가 목표였던 gcc -O2 대비 70% 성능에 도달함
- 새 OCaml 도구 mgen 이 lispy IL 패턴을 C 매칭 코드로 컴파일해, 기존 수작업 명령 선택 로직을 대체하거나 단순화할 수 있게 됨
- mgen은 특수 주석 블록의 IL 패턴을 찾아 바로 아래에 C 코드를 삽입하며, 현재 사용 예는 isel.c에 있음
- 명령 DAG 매칭은 Ken Thompson의 Plan9 C 컴파일러 방식과 유사한 번호 매기기 접근을 따르며, runmatch()가 해석하는 단순 바이트코드 매처도 생성됨
- Windows ABI 지원이 추가되어 -t amd64_win을 넘기면 Windows 대상 컴파일이 가능해짐
- QBE가 생성하는 어셈블리는 여전히 AT&T 문법이며, mingw 어셈블러로 컴파일하는 방식이 적합하다고 안내됨
- 위치 독립 코드 지원이 개선되어 대부분의 대상에서 공유 객체와 더 원활히 링크하고 공유 객체를 생성할 수 있게 됨
- 새 extern 동적 상수 플래그(DYNCONST)로 IL 수준에서 동적 라이브러리 변수 같은 전역 심볼의 간접 접근을 표현할 수 있음
-
Homepage
-
개발자
- QBE - 컴파일러 백엔드: 버전 1.3