PÄc seÅ”u mÄneÅ”u attÄ«stÄ«bas uzrÄdÄ«ts projekta izlaidums LLVM 9.0 ā ar GCC saderÄ«gi rÄ«ki (kompilatori, optimizÄtÄji un kodu Ä£eneratori), programmu kompilÄÅ”anai RISC lÄ«dzÄ«gu virtuÄlo instrukciju starpbitkodÄ (zema lÄ«meÅa virtuÄlÄ maŔīna ar daudzlÄ«meÅu optimizÄcijas sistÄmu). Ä¢enerÄto pseidokodu, izmantojot JIT kompilatoru, var pÄrvÄrst maŔīnas instrukcijÄs tieÅ”i programmas izpildes laikÄ.
JaunÄs LLVM 9.0 funkcijas ietver eksperimentÄlÄ dizaina taga noÅemÅ”anu no mÄrÄ·a RISC-V platformas, C++ atbalstu OpenCL, iespÄju sadalÄ«t programmu dinamiski ielÄdÄtÄs daļÄs LLD un ievieÅ”anu.asm goto", ko izmanto Linux kodola kodÄ. libc++ pievienoja atbalstu WASI (WebAssembly System Interface), un LLD pievienoja sÄkotnÄjo atbalstu WebAssembly dinamiskajai saitei.
Pievienots GCC specifiskÄs izteiksmes ievieÅ”anaasm gotoā, kas ļauj pÄriet no montÄtÄja iekļautÄ bloka uz etiÄ·eti C kodÄ. Å Ä« funkcija ir nepiecieÅ”ama, lai izveidotu Linux kodolu režīmÄ āCONFIG_JUMP_LABEL=yā, izmantojot Clang sistÄmÄs ar x86_64 arhitektÅ«ru. Å emot vÄrÄ iepriekÅ”Äjos laidienos pievienotÄs izmaiÅas, Linux kodolu tagad var izveidot programmÄ Clang x86_64 arhitektÅ«rai (iepriekÅ” tika atbalstÄ«ta tikai Äka arm, aarch64, ppc32, ppc64le un mips arhitektÅ«rÄm). TurklÄt Android un ChromeOS projekti jau ir pÄrveidoti, lai kodola veidoÅ”anai izmantotu Clang, un Google testÄ Clang kÄ galveno platformu kodolu veidoÅ”anai savÄm ražoÅ”anas Linux sistÄmÄm. NÄkotnÄ kodola veidoÅ”anas procesÄ var izmantot citus LLVM komponentus, tostarp LLD, llvm-objcopy, llvm-ar, llvm-nm un llvm-objdump;
Pievienots eksperimentÄls atbalsts C++17 lietoÅ”anai OpenCL. ÄŖpaÅ”as funkcijas ietver adreÅ”u telpas atribÅ«tu atbalstu, adreÅ”u telpas konvertÄÅ”anas bloÄ·ÄÅ”anu, izmantojot tipu apraides operatorus, vektoru tipu nodroÅ”inÄÅ”anu, kÄ OpenCL for C, Ä«paÅ”u OpenCL tipu klÄtbÅ«tni attÄliem, notikumiem, kanÄliem utt.
Pievienoti jauni kompilatora karodziÅi ā-ftime-traceā un ā-ftime-trace-granularity=Nā, lai Ä£enerÄtu atskaiti par dažÄdu priekÅ”gala posmu (parsÄÅ”ana, inicializÄcija) un aizmugursistÄmas (optimizÄcijas posmi) izpildes laiku. PÄrskats tiek saglabÄts json formÄtÄ, kas ir saderÄ«gs ar chrome://tracing un speedscope.app;
Pievienota specifikatora ā__declspec(allocator)ā apstrÄde un pavadoÅ”Äs atkļūdoÅ”anas informÄcijas Ä£enerÄÅ”ana, kas ļauj uzraudzÄ«t atmiÅas patÄriÅu Visual Studio vidÄ;
C valodai ir pievienots atbalsts makro ā__FILE_NAME__ā, kas atgÄdina makro ā__FILE__ā, bet ietver tikai faila nosaukumu bez pilna ceļa;
C++ ir paplaÅ”inÄjis atbalstu adreÅ”u telpas atribÅ«tiem, lai aptvertu dažÄdas C++ funkcijas, tostarp parametru un argumentu modeļus, atsauces veidus, atgrieÅ”anas veida secinÄjumus, objektus, automÄtiski Ä£enerÄtas funkcijas, iebÅ«vÄtos operatorus un daudz ko citu.
Ir paplaÅ”inÄtas iespÄjas, kas saistÄ«tas ar OpenCL, OpenMP un CUDA atbalstu. Tas ietver sÄkotnÄjo atbalstu iebÅ«vÄto OpenCL funkciju netieÅ”ai iekļauÅ”anai (ir pievienots karodziÅÅ” ā-fdeclare-opencl-builtinsā), ir ieviests paplaÅ”inÄjums cl_arm_integer_dot_product un ir paplaÅ”inÄti diagnostikas rÄ«ki;
Uzlabots statiskÄ analizatora darbs un pievienota dokumentÄcija par statiskÄs analÄ«zes veikÅ”anu. Pievienoti karodziÅi, lai parÄdÄ«tu pieejamos pÄrbaudÄ«tÄja moduļus un atbalstÄ«tÄs opcijas (ā-analyzer-checker[-option]-helpā, ā-analyzer-checker[-option]-help-alphaā un ā-analyzer-checker[-option]-help ā -izstrÄdÄtÄjsā). Pievienots karodziÅÅ” "-analyzer-werror", lai brÄ«dinÄjumus uzskatÄ«tu par kļūdÄm.
Pievienoti jauni verifikÄcijas režīmi:
security.insecureAPI.DeprecatedOrUnsafeBufferHandling, lai identificÄtu nedroÅ”u praksi darbÄ ar buferiem;
osx.MIGChecker, lai meklÄtu MIG (Mach Interface Generator) izsaukuma noteikumu pÄrkÄpumus;
optin.osx.OSObjectCStyleCast, lai atrastu nepareizas XNU libkern objektu konversijas;
apiModeling.llvm ar modelÄÅ”anas pÄrbaudes funkciju komplektu, lai atklÄtu kļūdas LLVM kodu bÄzÄ;
StabilizÄts kods neinicializÄtu C++ objektu pÄrbaudei (UninitializedObject optin.cplusplus pakotnÄ);
Clang-format utilÄ«ta ir pievienojusi atbalstu koda formatÄÅ”anai C# valodÄ un nodroÅ”ina atbalstu koda formatÄÅ”anas stilam, ko izmanto Microsoft;
clang-cl, alternatÄ«vs komandrindas interfeiss, kas nodroÅ”ina opciju lÄ«meÅa saderÄ«bu ar cl.exe kompilatoru, kas iekļauts Visual Studio, ir pievienojis heiristiku, lai neesoÅ”us failus uzskatÄ«tu par komandrindas opcijÄm un parÄdÄ«tu atbilstoÅ”u brÄ«dinÄjumu (piemÄram, palaižot "clang-cl /diagnostic :caret /c test.cc");
Liela daļa jaunu pÄrbaužu ir pievienota, lai nodroÅ”inÄtu tÄ«rÄ«bu, tostarp pievienotas pÄrbaudes, kas raksturÄ«gas OpenMP API;
IzvÄrsts servera iespÄjas zvana (Clang Server), kurÄ pÄc noklusÄjuma ir iespÄjots fona indeksa veidoÅ”anas režīms, ir pievienots atbalsts kontekstuÄlajÄm darbÄ«bÄm ar kodu (mainÄ«go izguve, automÄtisko un makro definÄ«ciju paplaÅ”inÄÅ”ana, atsoļu virkÅu konvertÄÅ”ana uz neatsoļotÄm), iespÄja parÄdÄ«t brÄ«dinÄjumi no Clang-tidy, paplaÅ”inÄta kļūdu diagnostika galvenes failos un pievienota iespÄja parÄdÄ«t informÄciju par tipu hierarhiju;
LLD linkerim ir pievienota eksperimentÄla sadalÄ«Å”anas funkcija, kas ļauj sadalÄ«t vienu programmu vairÄkÄs daļÄs, no kurÄm katra atrodas atseviÅ”Ä·Ä ELF failÄ. Å Ä« funkcija ļauj palaist programmas galveno daļu, kas darbÄ«bas laikÄ pÄc nepiecieÅ”amÄ«bas ielÄdÄs citus komponentus (piemÄram, iebÅ«vÄto PDF skatÄ«tÄju var atdalÄ«t atseviÅ”Ä·Ä failÄ, kas tiks ielÄdÄts tikai tad, kad lietotÄjs atvÄrs PDF fails).
LLD Linker izvirzÄ«ts priekÅ”plÄnÄ uz stÄvokli, kas piemÄrots Linux kodola saistÄ«Å”anai arm32_7, arm64, ppc64le un x86_64 arhitektÅ«rÄm.
Jaunas opcijas "-" (izvade uz stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" un "-z common-page-size". AArch64 arhitektÅ«rai ir pievienots BTI (zaru mÄrÄ·a rÄdÄ«tÄja) un PAC (rÄdÄ«tÄja autentifikÄcijas koda) instrukciju atbalsts. Atbalsts MIPS, RISC-V un PowerPC platformÄm ir ievÄrojami uzlabots. Pievienots sÄkotnÄjais atbalsts WebAssembly dinamiskajai saistÄ«Å”anai;
ProgrammÄ libc++ Ä«stenota funkcijas ssize, std::is_constant_evaluated, std::midpoint un std::lerp, std::span ir pievienotas metodes āfrontā un ābackā, ir pievienoti tipu std::is_unbounded_array un std::is_bounded_array atribÅ«ti. , standarta iespÄjas ir paplaÅ”inÄtas: :atomic. GCC 4.9 atbalsts ir pÄrtraukts (var izmantot ar GCC 5.1 un jaunÄkiem izdevumiem). Pievienots atbalsts BIJU ES (WebAssembly sistÄmas interfeiss, interfeiss WebAssembly lietoÅ”anai Ärpus pÄrlÅ«kprogrammas);
Ir pievienotas jaunas optimizÄcijas. DažÄs situÄcijÄs ir iespÄjota memcmp zvanu pÄrvÄrÅ”ana par bcmp. ÄŖstenota diapazona pÄrbaudes izlaidums lÄciena tabulÄm, kurÄs zemÄkie slÄdžu bloki nav sasniedzami vai ja netiek izmantotas instrukcijas, piemÄram, izsaucot funkcijas ar tipu void;
RISC-V arhitektÅ«ras aizmugure ir stabilizÄta, kas vairs netiek pozicionÄta kÄ eksperimentÄla un tiek veidota pÄc noklusÄjuma. NodroÅ”ina pilnu koda Ä£enerÄÅ”anas atbalstu RV32I un RV64I instrukciju kopas variantiem ar MAFDC paplaÅ”inÄjumiem;
Ir veikti daudzi X86, AArch64, ARM, SystemZ, MIPS, AMDGPU un PowerPC arhitektÅ«ru aizmugursistÄmas uzlabojumi. PiemÄram, arhitektÅ«rai
AArch64 pievienoja atbalstu SVE2 (Scalable Vector Extension 2) un MTE (Memory Tagging Extensions) instrukcijÄm; ARM aizmugursistÄmÄ tika pievienots atbalsts Armv8.1-M arhitektÅ«rai un MVE (M-Profile Vector Extension) paplaÅ”inÄjums. AMDGPU aizmugursistÄmai ir pievienots atbalsts GFX10 (Navi) arhitektÅ«rai, pÄc noklusÄjuma ir iespÄjotas funkciju izsaukÅ”anas iespÄjas un ir aktivizÄta kombinÄtÄ caurlaide. DPP (Datu paralÄlÄs primitÄ«vas).
LLDB atkļūdotÄjam tagad ir krÄsu izcelÅ”ana atpakaļsekoÅ”anas gadÄ«jumiem un pievienots atbalsts DWARF4 debug_types un DWARF5 debug_info blokiem;
Objektu un izpildÄmo failu atbalsts COFF formÄtÄ ir pievienots utilÄ«tprogrammÄm llvm-objcopy un llvm-strip.