Dark Mode

Pereiti do vmistu

Low Level Virtual Machine

Ochikuie na perevirku
Material z Vikipediyi -- vil'noyi entsiklopediyi.

Status versiyi storinki

Na tsii storintsi pokazano neperevireni zmini

1 zmina u tsii versiyi ochikuie na perevirku. Stabil'nu versiiu bulo perevireno 15 travnia 2025.
LLVM
TipKompiliatori, optimizatori i generatori kodu
RozrobnikiLLVM Developer Group
Pershii vipusk24 zhovtnia 2003[2]
Stabil'nii vipusk20.1.8 (9 lipnia 2025)
Operatsiina sistemakrosplatformnist'
Mova programuvanniaC++
LitsenziiaUniversity of Illinois Open Source License[3]
Repozitoriigithub.com/llvm/llvm-project
Vebsaitllvm.org

Low Level Virtual Machine (LLVM) -- universal'na sistema analizu, transformatsiyi i optimizatsiyi program, shcho realizuie virtual'nu mashinu z RISC-podibnimi instruktsiiami. Mozhe vikoristovuvatisia iak optimizuval'nii kompiliator ts'ogo bait-kodu v mashinnii kod dlia riznikh arkhitektur abo dlia iogo interpretatsiyi ta JIT-kompiliatsiyi (dlia deiakikh platform).

LLVM dozvoliaie kompiliuvati programi, napisani movami S, C++, ObjC, Fortran, Ada, Haskell, Java, Python, Ruby, Rust, JavaScript, GLSL, abo bud'-iakoiu inshoiu, dlia iakoyi realizovano front-end. V ramkakh proiektu rozrobleno frontend Clang dlia mov C i C++ i versiia GCC, shcho vikoristovuiut' LLVM iak bekend. U Glasgow Haskell Compiler takozh realizovana kompiliatsiia za dopomogoiu LLVM, isnuie shche bezlich program, shcho vikoristovuiut' tsiu infrastrukturu.

Istoriia

[red. | red. kod]

LLVM -- ne prosto chergovii akademichnii proiekt. Iogo istoriia pochalas' u 2000 rotsi v Universiteti Illinoisa, a teper LLVM vikoristovuiut' taki giganti industriyi iak Apple, Adobe ta Google. Zokrema, na LLVM zasnovana pidsistema OpenGL u MacOS X 10.5, a iPhone SDK vikoristovuie GCC z bekendom na LLVM. Apple ta Google ie odnimi iz osnovnikh sponsoriv proiektu, a natkhnennik LLVM -- Kris Lattner -- teper pratsiuie v Apple.

Osoblivosti

[red. | red. kod]

U osnovi LLVM lezhit' promizhne podannia kodu (intermediate representation, IR), nad iakim mozhna vikonuvati transformatsiyi u vsi kompiliatsiyi, komponuvannia i vikonannia. Iz n'ogo generuiet'sia optimizovanii mashinnii kod dlia nizki platform, iak statichno, tak i dinamichno (JIT-kompiliatsiia). LLVM pidtrimuie generatsiiu kodu dlia x86, x86-64, ARM, PowerPC, SPARC, MIPS, IA-64, Alpha.

LLVM napisana na C++ i portovana na bil'shist' unix-sistem i Windows. Sistema maie modul'nu strukturu i mozhe rozshiriuvatis' dodatkovimi algoritmami transformatsiyi (compiler passes) i kodogeneratorami dlia novikh aparatnikh platform. Frontend koristuvacha, iak pravilo, linkuiet'sia iz LLVM i vikoristovuie C++ API dlia generatsiyi kodu i iogo peretvoren'. Odnak LLVM mistit' u sobi i standalone utiliti.

U LLVM vkliuchena obgortka API dlia OCaml.

Platformi

[red. | red. kod]

LLVM pidtrimuie robotu na nastupnikh platformakh:

Operatsiina sistema Arkhitektura Kompiliator
FreeBSD x86 GCC, Clang
FreeBSD AMD64 GCC, Clang
Linux AMD64 GCC, Clang
Linux x86 GCC, Clang
Mac OS X PowerPC GCC
Mac OS X x86 GCC, Clang
Solaris UltraSPARC GCC
Cygwin/Win32 x86 GCC 3.4.X, Binutils 2.15
MinGW/Win32 x86 GCC 3.4.X, Binutils 2.15

LLVM maie chastkovu pidtrimku takikh platform:

Operatsiina sistema Arkhitektura Kompiliator
Windows x86 Visual Studio .NET
AIX PowerPC GCC
Linux PowerPC GCC
Linux Alpha GCC
Linux Itanium (IA-64) GCC
HP-UX Itanium (IA-64) HP aCC

Tipi danikh

[red. | red. kod]

Prosti tipi

[red. | red. kod]
Tsili chisla dovil'noyi rozriadnosti irozriadnist'
  • i1 -- buleve znachennia -- 0 abo 1
  • i32 -- 32-rozriadne tsile
  • i17
  • i256
  • Generatsiia mashinnogo kodu dlia tipiv duzhe velikoyi rozriadnosti ne pidtrimuiet'sia. Napriklad, dlia x86 vam dovedet'sia obmezhitis' i64, a dlia x86-64 ta inshikh 64-rozriadnikh platform -- 128-bitnimi tsilimi. Ale dlia promizhnogo predstavlennia niiakikh obmezhen' nema.
  • Chisla vvazhaiut'sia predstavlenimi u dodatkovomu kodi. Na rivni tipiv riznitsi mizh znakovimi i bezznakovimi tsilimi ne isnuie: u tikh vipadkakh, koli tse maie znachennia, z nimi pratsiuiut' rizni instruktsiyi.
Chisla z rukhomoiu komoiu float, double, tipi, spetsifichni dlia konkretnoyi platformi (napriklad, x86_fp80)
Puste znachennia void

Pokhidni tipi

[red. | red. kod]
Vkazivniki tip* i32* -- vkazivnik na 32-bitne tsile
Masivi [chislo elementiv x tip]
  • [10 x i32]
  • [8 x double]
Strukturi { i32, i32, double }
Vektor -- spetsial'nii tip dlia sproshchennia SIMD-operatsii. Vektor skladaiet'sia iz 2^n znachen' primitivnogo tipu -- tsilogo abo z plavaiuchoiu krapkoiu.
< chislo elementiv x tip > < 4 x float > -- vektor XMM
Funktsiyi
  • i32 (i32, i32)
  • float ({ float, float }, { float, float })

Sistema tipiv rekursivna, tobto mozhna vikoristovuvati bagatovimirni masivi, masivi struktur, vkazivniki na strukturi i funktsiyi i t. d.

Operatsiyi

[red. | red. kod]

Bil'shist' instruktsii u LLVM priimaiut' dva argumenti (operanda) i vertaiut' odne znachennia (triadresnii kod). Znachennia viznachaiut'sia tekstovim identifikatorom. Lokal'ni znachennia poznachaiut'sia prefiksom %, a global'ni -- @. Lokal'ni znachennia takozh nazivaiut' registrami, a LLVM -- virtual'noiu mashinoiu z neskinchennim chislom registriv. Priklad:

%sum = add i32 %n, 5
%diff = sub double %a, %b
%z = add <4 x float> %v1, %v2 -- poelementne dodavannia
%cond = icmp eq %x, %y -- Porivniannia tsilikh chisel. Rezul'tat maie tip i1
%success = call i32 @puts(i8* %str)

Tip operandiv zavzhdi vkazuiet'sia iavno, i odnoznachno viznachaie tip rezul'tatu. Operandi arifmetichnikh instruktsii povinni mati odnakovii tip, ale sami instruktsiyi <> dlia bud'-iakikh chislovikh tipiv i vektoriv.

LLVM pidtrimuie povnii nabir arifmetichnikh operatsii, pobitovikh logichnikh operatsii i operatsii zsuvu, a takozh spetsial'ni instruktsiyi dlia roboti z vektorami.

LLVM IR strogo tipizovanii, tomu isnuiut' operatsiyi privedennia tipiv, iaki iavno koduiut'sia spetsial'nimi instruktsiiami. Nabir iz 9 instruktsii pokrivaie vsi mozhlivi privedennia mizh riznimi chislovimi tipami: tsilimi i z rukhomoiu komoiu, iz znakom i bez, riznoyi rozriadnosti i t.p. Krim ts'ogo ie instruktsiyi peretvorennia mizh tsilimi i vkazivnikami, a takozh instruktsiia bitcast, iaka privede vse do vs'ogo, ale za rezul'tat vi vidpovidaiete sami.

Pam'iat'

[red. | red. kod]

Krim znachen'-registriv, u LLVM ie i robota iz pam'iattiu. Znachennia v pam'iati adresuiut'sia tipizovanimi vkazivnikami. Zvernutisia do pam'iati mozhna za dopomogoiu dvokh instruktsii: load i store. Napriklad:

%x = load i32* %x.ptr -- otrimati znachennia tipu i32 po vkazivniku %x.ptr
%tmp = add i32 %x, 5 -- dodati 5
store i32 %tmp, i32* %x.ptr -- i povernuti nazad

Instruktsiia malloc transliuiet'sia u viklik odnoimennoyi sistemnoyi funktsiyi i vidiliaie pam'iat' u kupi, povertaiuchi znachennia -- vkazivnik viznachenogo tipu. U pari z neiu ide instruktsiia free.

%struct.ptr = malloc { double, double }
%string = malloc i8, i32 %length
%array = malloc [16 x i32]
free i8* %string

Instruktsiia alloca vidiliaie pam'iat' na steku.

%x.ptr = alloca double -- %x.ptr maie tip double*
%array = alloca float, i32 8 -- %array maie tip float*, a ne [8 x float]!

Pam'iat', vidilena alloca, avtomatichno zvil'niaiet'sia pri vikhodi iz funktsiyi za dopomogoiu instruktsii ret abo unwind.

Suputni proiekti

[red. | red. kod]

Z proiektiv, zasnovanikh na LLVM, shcho rozvivaiut'sia paralel'no, mozhna vidznachiti:

Vidznaki

[red. | red. kod]

U 2010 Asotsiatsiia obchisliuval'noyi tekhniki (ACM), naiavtoritetnisha mizhnarodna organizatsiia, v oblasti komp'iuternikh sistem prisudila proiektu LLVM premiiu za vnesok u rozvitok mov programuvannia (SIGPLAN Programming Languages Software Award). Premiia prisudzhuiet'sia za znachnii vpliv na pov'iazani z movami programuvannia doslidzhennia, realizatsiyi tekhnologii i instrumenti.

Primitki

[red. | red. kod]
-1">| https://github.com/llvm/llvm-project/graphs/contributors?type=a
  • | LLVM 1.0 Release Notes. Arkhiv originalu za 26 listopada 2018. Protsitovano 15 sichnia 2019.
  • | LLVM: Frequently Asked Questions. Arkhiv originalu za 13 lipnia 2013. Protsitovano 23 grudnia 2010.
  • Posilannia

    [red. | red. kod]
    Audio, video(igri), foto ta mistetstvo
    Tematichni saiti
    Slovniki ta entsiklopediyi
    Dovidkovi vidannia
    Normativnii kontrol'
    Zagal'ne
    Istoriia
    OS na bazi VPZ
    Rozrobka VPZ[en]
    Menedzheri
    vikon XWS
    Organizatsiyi
    Litsenziyi
    Problemi
    Inshe