www.wikidata.uk-ua.nina.az
Low Level Virtual Machine LLVM universalna sistema analizu transformaciyi i optimizaciyi program sho realizuye virtualnu mashinu z RISC podibnimi instrukciyami Mozhe vikoristovuvatisya yak optimizuvalnij kompilyator cogo bajt kodu v mashinnij kod dlya riznih arhitektur abo dlya jogo interpretaciyi ta JIT kompilyaciyi dlya deyakih platform LLVMTip Kompilyatori optimizatori i generatori koduRozrobniki LLVM Developer GroupPershij vipusk 24 zhovtnya 2003 2 Stabilnij vipusk 14 0 0 25 bereznya 2022 Operacijna sistema krosplatformnistMova programuvannya C Licenziya University of Illinois Open Source License 3 Repozitorij github com llvm llvm projectVebsajt llvm org LLVM u VikishovishiLLVM dozvolyaye kompilyuvati programi napisani movami S C ObjC Fortran Ada Haskell Java Python Ruby Rust JavaScript GLSL abo bud yakoyu inshoyu dlya yakoyi realizovano front end V ramkah proyektu rozrobleno frontend Clang dlya mov C i C i versiya GCC sho vikoristovuyut LLVM yak bekend U Glasgow Haskell Compiler takozh realizovana kompilyaciya za dopomogoyu LLVM isnuye she bezlich program sho vikoristovuyut cyu infrastrukturu Zmist 1 Istoriya 2 Osoblivosti 3 Platformi 4 Tipi danih 4 1 Prosti tipi 4 2 Pohidni tipi 5 Operaciyi 6 Pam yat 7 Suputni proyekti 8 Vidznaki 9 Primitki 10 PosilannyaIstoriya RedaguvatiLLVM ne prosto chergovij akademichnij proyekt Jogo istoriya pochalas u 2000 roci v Universiteti Illinojsa a teper LLVM vikoristovuyut taki giganti industriyi yak Apple Adobe ta Google Zokrema na LLVM zasnovana pidsistema OpenGL u MacOS X 10 5 a iPhone SDK vikoristovuye GCC z bekendom na LLVM Apple ta Google ye odnimi iz osnovnih sponsoriv proyektu a nathnennik LLVM Kris Lattner teper pracyuye v Apple Osoblivosti RedaguvatiU osnovi LLVM lezhit promizhne podannya kodu intermediate representation IR nad yakim mozhna vikonuvati transformaciyi u vsi kompilyaciyi komponuvannya i vikonannya Iz nogo generuyetsya optimizovanij mashinnij kod dlya nizki platform yak statichno tak i dinamichno JIT kompilyaciya LLVM pidtrimuye generaciyu kodu dlya x86 x86 64 ARM PowerPC SPARC MIPS IA 64 Alpha LLVM napisana na C i portovana na bilshist unix sistem i Windows Sistema maye modulnu strukturu i mozhe rozshiryuvatis dodatkovimi algoritmami transformaciyi compiler passes i kodogeneratorami dlya novih aparatnih platform Frontend koristuvacha yak pravilo linkuyetsya iz LLVM i vikoristovuye C API dlya generaciyi kodu i jogo peretvoren Odnak LLVM mistit u sobi j standalone utiliti U LLVM vklyuchena obgortka API dlya OCaml Platformi RedaguvatiLLVM pidtrimuye robotu na nastupnih platformah Operacijna sistema Arhitektura KompilyatorFreeBSD x86 GCC ClangFreeBSD AMD64 GCC ClangLinux AMD64 GCC ClangLinux x86 GCC ClangMac OS X PowerPC GCCMac OS X x86 GCC ClangSolaris UltraSPARC GCCCygwin Win32 x86 GCC 3 4 X Binutils 2 15MinGW Win32 x86 GCC 3 4 X Binutils 2 15LLVM maye chastkovu pidtrimku takih platform Operacijna sistema Arhitektura KompilyatorWindows x86 Visual Studio NETAIX PowerPC GCCLinux PowerPC GCCLinux Alpha GCCLinux Itanium IA 64 GCCHP UX Itanium IA 64 HP aCCTipi danih RedaguvatiProsti tipi Redaguvati Cili chisla dovilnoyi rozryadnosti irozryadnist i1 buleve znachennya 0 abo 1 i32 32 rozryadne cile i17 i256Generaciya mashinnogo kodu dlya tipiv duzhe velikoyi rozryadnosti ne pidtrimuyetsya Napriklad dlya x86 vam dovedetsya obmezhitis i64 a dlya x86 64 ta inshih 64 rozryadnih platform 128 bitnimi cilimi Ale dlya promizhnogo predstavlennya niyakih obmezhen nema Chisla vvazhayutsya predstavlenimi u dodatkovomu kodi Na rivni tipiv riznici mizh znakovimi i bezznakovimi cilimi ne isnuye u tih vipadkah koli ce maye znachennya z nimi pracyuyut rizni instrukciyi Chisla z ruhomoyu komoyu float double tipi specifichni dlya konkretnoyi platformi napriklad x86 fp80 Puste znachennya voidPohidni tipi Redaguvati Vkazivniki tip i32 vkazivnik na 32 bitne cileMasivi chislo elementiv x tip 10 x i32 8 x double Strukturi i32 i32 double Vektor specialnij tip dlya sproshennya SIMD operacij Vektor skladayetsya iz 2 n znachen primitivnogo tipu cilogo abo z plavayuchoyu krapkoyu lt chislo elementiv x tip gt lt 4 x float gt vektor XMMFunkciyi i32 i32 i32 float float float float float Sistema tipiv rekursivna tobto mozhna vikoristovuvati bagatovimirni masivi masivi struktur vkazivniki na strukturi i funkciyi i t d Operaciyi RedaguvatiBilshist instrukcij u LLVM prijmayut dva argumenti operanda i vertayut odne znachennya triadresnij kod Znachennya viznachayutsya tekstovim identifikatorom Lokalni znachennya poznachayutsya prefiksom a globalni Lokalni znachennya takozh nazivayut registrami a LLVM virtualnoyu mashinoyu z neskinchennim chislom registriv Priklad sum add i32 n 5 diff sub double a b z add lt 4 x float gt v1 v2 poelementne dodavannya cond icmp eq x y Porivnyannya cilih chisel Rezultat maye tip i1 success call i32 puts i8 str Tip operandiv zavzhdi vkazuyetsya yavno i odnoznachno viznachaye tip rezultatu Operandi arifmetichnih instrukcij povinni mati odnakovij tip ale sami instrukciyi perevantazheni dlya bud yakih chislovih tipiv i vektoriv LLVM pidtrimuye povnij nabir arifmetichnih operacij pobitovih logichnih operacij i operacij zsuvu a takozh specialni instrukciyi dlya roboti z vektorami LLVM IR strogo tipizovanij tomu isnuyut operaciyi privedennya tipiv yaki yavno koduyutsya specialnimi instrukciyami Nabir iz 9 instrukcij pokrivaye vsi mozhlivi privedennya mizh riznimi chislovimi tipami cilimi i z ruhomoyu komoyu iz znakom i bez riznoyi rozryadnosti i t p Krim cogo ye instrukciyi peretvorennya mizh cilimi i vkazivnikami a takozh instrukciya bitcast yaka privede vse do vsogo ale za rezultat vi vidpovidayete sami Pam yat RedaguvatiKrim znachen registriv u LLVM ye i robota iz pam yattyu Znachennya v pam yati adresuyutsya tipizovanimi vkazivnikami Zvernutisya do pam yati mozhna za dopomogoyu dvoh instrukcij load i store Napriklad x load i32 x ptr otrimati znachennya tipu i32 po vkazivniku x ptr tmp add i32 x 5 dodati 5 store i32 tmp i32 x ptr i povernuti nazad Instrukciya malloc translyuyetsya u viklik odnojmennoyi sistemnoyi funkciyi i vidilyaye pam yat u kupi povertayuchi znachennya vkazivnik viznachenogo tipu U pari z neyu jde instrukciya free struct ptr malloc double double string malloc i8 i32 length array malloc 16 x i32 free i8 string Instrukciya alloca vidilyaye pam yat na steku x ptr alloca double x ptr maye tip double array alloca float i32 8 array maye tip float a ne 8 x float Pam yat vidilena alloca avtomatichno zvilnyayetsya pri vihodi iz funkciyi za dopomogoyu instrukcij ret abo unwind Suputni proyekti RedaguvatiZ proyektiv zasnovanih na LLVM sho rozvivayutsya paralelno mozhna vidznachiti KLEE Arhivovano 25 grudnya 2012 u Wayback Machine simvolnij analizator i generator testovih naboriv Runtime biblioteka compiler rt Arhivovano 6 lipnya 2009 u Wayback Machine llvm mc Arhivovano 15 sichnya 2013 u Wayback Machine avtogenerator asemblera dizasemblera ta inshih pov yazanih z mashinnim kodom komponentiv na osnovi opisiv parametriv LLVM sumisnih platform VMKit Arhivovano 9 listopada 2020 u Wayback Machine virtualna mashina dlya Java i NET Realizaciya funkcijnoyi movi programuvannya Pure nedostupne posilannya z chervnya 2019 LDC Arhivovano 18 travnya 2012 u WebCite kompilyator dlya movi D Roadsend PHP optimizator statichnij i JIT kompilyator dlya movi PHP Virtualni mashini dlya Ruby Rubinius Arhivovano 13 grudnya 2015 u Wayback Machine i MacRuby Arhivovano 24 grudnya 2012 u Wayback Machine Unladen Swallow Arhivovano 10 lyutogo 2011 u Wayback Machine realizaciya movi Python LLVM Lua Arhivovano 22 sichnya 2009 u Wayback Machine FlashCCompiler Arhivovano 5 veresnya 2012 u Wayback Machine zasib dlya kompilyaciyi kodu na movi Si u vid pridatnij dlya vikonannya u virtualnij mashini Adobe Flash LLDB 1 Arhivovano 6 serpnya 2012 u Wayback Machine modulna infrastruktura znevadzhennya vikoristovuye taki pidsistemi LLVM yak API dlya dizasemblyuvannya Clang AST Abstract Syntax Tree parser viraziv generator kodu i JIT kompilyator LLDB pidtrimuye znevadzhennya bagatonitevih program na movah C Objective C i C vidriznyayetsya mozhlivistyu pidklyuchennya plaginiv i skriptiv na movi Python demonstruye ekstremalno visoku shvidkodiya pri znevadzhenni program velikogo rozmiru Emscripten 2 Arhivovano 20 bereznya 2017 u Wayback Machine transkompilyator bitkodu LLVM v JavaScript sho dozvolyaye peretvoriti dlya zapusku v brauzeri zastosunki spochatku napisani na movi Si Napriklad vdalosya zapustiti Python Lua Quake Freetype sparse llvm nedostupne posilannya z chervnya 2019 bekend nacilenij na stvorennya Si kompilyatora zdatnogo zbirati yadro Linux Portable OpenCL vidkrita i nezalezhna realizaciya standartu OpenCL CUDA Compiler dozvolyaye zgeneruvati GPU instrukciyi z kodu napisanogo na movah Si Si ta Fortran Julia vidkrita dinamichna mova programuvannya sho vikoristovuye napracyuvannya proyektu LLVM Vidznaki RedaguvatiU 2010 Asociaciya obchislyuvalnoyi tehniki ACM najavtoritetnisha mizhnarodna organizaciya v oblasti komp yuternih sistem prisudila proyektu LLVM premiyu za vnesok u rozvitok mov programuvannya SIGPLAN Programming Languages Software Award Premiya prisudzhuyetsya za znachnij vpliv na pov yazani z movami programuvannya doslidzhennya realizaciyi tehnologij i instrumenti Primitki Redaguvati https github com llvm llvm project graphs contributors type a LLVM 1 0 Release Notes Arhiv originalu za 26 listopada 2018 Procitovano 15 sichnya 2019 LLVM Frequently Asked Questions Arhiv originalu za 13 lipnya 2013 Procitovano 23 grudnya 2010 Posilannya RedaguvatiLLVM Arhivovano 3 travnya 2004 u Wayback Machine libJIT Linear Scan Register Allocator Arhivovano 12 lyutogo 2012 u WebCite Amy Brown and Greg Wilson eds Chapter 11 LLVM Chris Lattner The Architecture of Open Source Applications 2011 P 155 170 ISBN 978 1 257 63801 7 Otrimano z https uk wikipedia org w index php title Low Level Virtual Machine amp oldid 40289746