두루미 리프트

Cranelift
두루미 리프트
개발자바이트코드 얼라이언스
초기 출시2016; 7년 전 (2016)
안정적 방출
0.97.1
작성 위치러스트
운영 체제크로스 플랫폼
유형컴파일러
면허증.LLVM 예외가[1] 있는 Apache 라이센스
웹사이트https://captellift.dev/

Cranelift(이전의 Cretonne)는 대상에 독립적인 중간 표현실행 가능한 기계 코드로 변환하는 최적화 컴파일러 백엔드입니다.그것은 러스트로 쓰여 있습니다.이 프로젝트는 2016년에 시작되었고 현재 바이트코드 [2][3]얼라이언스에 의해 개발되었습니다.LLVM과 같은 컴파일러 백엔드가 사전 컴파일에 더 중점을 두는 것과 달리, Cranlift는 [4]프로젝트의 명시적인 목표가 짧은 컴파일 시간으로 적시 컴파일에 중점을 둡니다.

2023년 현재 Cranellift는 x86-64, AArch64, RISC-VIBM z/Architecture와 같은 명령어 집합 아키텍처를 지원합니다.

역사

2020년 백엔드 프레임워크를 다시 쓰기 전에 이 프로젝트는 기계 코드 방출 이전의 모든 컴파일 단계에서 하나의 중간 표현(IR), 즉 CLIF(Cranelift IR Format)만을 사용했습니다.오래된 설계는 명령어 합법화를 사용했으며, 여기에는 각 CLIF 명령어가 실행 가능한 코드가 방출될 수 있는 대상 기계의 명령어에 해당할 때까지 지속적으로 높은 수준의 IR을 변환하는 작업이 포함되었습니다.

2020년에 백엔드는 나중의 컴파일 단계를 위해 VCode라는 별도의 기계별 IR을 대신 사용하도록 다시 작성되었습니다.이렇게 다시 쓴 후에는 높은 수준의 입력 CLIF가 VCode로 하향 조정되기 전에 중간 계층에 의해 최적화되며, [4]이는 백엔드에 남아 있는 패스로 추가로 변환됩니다.도메인 특정 언어(DSL)에서 피프홀 옵티마이저를 생성하는 데 사용되는 도구인 피프매틱도 [5]추가되었지만 나중에 [6]제거되었습니다.

2022년, 이온몽키의 레지스터 할당자를 개조한 새로운 레지스터 할당자가 추가되었습니다.또한 백엔드에서 [7]명령어 선택 단계의 개발을 용이하게 하기 위해 프로젝트의 또 다른 DSL인 ISL(Instruction Selection/Lowering Expressions DSL)을 활용하기 위해 백엔드 프레임워크를 재작업하였습니다.

미드엔드에서는 [8]2022년에 e-그래프를 활용하는 최적화 패스가 추가되었습니다.최적화 패스는 2023년부터 기본적으로 활성화됩니다.

적용들

현재 Cranellift는 Wasmtime Wasmer와 같은 여러 Web Assembly 런타임에 의해 활용되고 있으며 LLVM 기반 런타임과 [9]비슷한 성능을 제공합니다.

크랜리프트로 구동되는 러스트 컴파일러용 코드 생성기도 존재합니다.[10]

참고 항목

레퍼런스

  1. ^ "LICENSE.md". GitHub.
  2. ^ "GitHub - bytecodealliance/cranelift at 399be07fcf00d0974d2a83d1af55f0bee9861d54". GitHub. Retrieved 26 January 2023.
  3. ^ "wasmtime/cranelift at main · bytecodealliance/wasmtime". GitHub. Retrieved 26 January 2023.
  4. ^ a b Fallin, Chris. "A New Backend for Cranelift, Part 1: Instruction Selection". cfallin.org. Retrieved 26 January 2023.
  5. ^ "Introduce peepmatic: a peephole optimizations DSL and peephole optimizer compiler by fitzgen · Pull Request #1647 · bytecodealliance/wasmtime". GitHub.
  6. ^ "Remove Peepmatic!!! by fitzgen · Pull Request #3543 · bytecodealliance/wasmtime". GitHub. Retrieved 2023-02-03.
  7. ^ Fallin, Chris. "Cranelift's Instruction Selector DSL, ISLE: Term-Rewriting Made Practical". cfallin.org. Retrieved 26 January 2023.
  8. ^ "egraph-based midend: draw the rest of the owl (productionized). by cfallin · Pull Request #4953 · bytecodealliance/wasmtime". GitHub. Retrieved 26 January 2023.
  9. ^ Denis, Frank. "Performance of WebAssembly runtimes in 2023 Frank DENIS random thoughts". 00f.net. Retrieved 26 January 2023.
  10. ^ "Cranelift codegen backend for rust". GitHub. 26 January 2023. Retrieved 26 January 2023.