Pas pas gjashtĂ« muajsh zhvillimi lĂ«shimi i projektit â njĂ« mjet i pĂ«rshtatshĂ«m pĂ«r GCC (kompilatorĂ«, optimizues dhe gjenerues kodi), qĂ« kompilon programet nĂ« njĂ« bitkod ndĂ«rmjetĂ«s tĂ« instrukcioneve virtuale tĂ« ngjashme me RISC (njĂ« makinĂ« virtuale me shumĂ« nivele optimizimi). Pseudokodi i gjeneruar mund tĂ« transformohet me ndihmĂ«n e JIT-kompilatorit nĂ« instrukcione tĂ« makinerisĂ« menjĂ«herĂ« nĂ« momentin e ekzekutimit tĂ« programit.
Ndryshimi kryesor në këtë version është përfshirja e , një front-end për gjuhën Fortran. Flang mbështet Fortran 2018, OpenMP 4.5 dhe OpenACC 3.0, por zhvillimi i projektit ende nuk është përfunduar dhe front-end-i kufizohet në analizën e kodit dhe verifikimin e saktësisë së tij. Generimi i kodit ndërmjetës LLVM ende nuk mbështetet dhe për krijimin e skedarëve ekzekutivë gjenerohet kodi kanonik, i cili dërgohet në një kompilator të jashtëm Fortran.
në Clang 11.0:
- Shtuar mundësia për rikthimin e pemës abstrakte të sintaksës () për kodin e papërshtatshëm në C++, i cili mund të përdoret për të thjeshtuar diagnostikimin e gabimeve dhe ofron informacion shtesë për mjete të jashtme, si clang-tidy dhe clangd. Mundësia është e aktivizuar si parazgjedhje për kodin në C++ dhe menaxhohet përmes opsioneve «-Xclang -f[no-]recovery-ast».
- Modet e reja të diagnostikimit janë shtuar:
- «-Wpointer-to-int-cast» â grup paralajmĂ«imesh pĂ«r konvertimin e treguesve nĂ« tipin e plotĂ« int, i cili nuk mund tĂ« pĂ«rmbajĂ« tĂ« gjitha vlerat e mundshme.
- «-Wuninitialized-const-reference» â paralajmĂ«rim pĂ«r kalimin e variableve tĂ« pa inicializuara nĂ« parametrat e funksioneve qĂ« pranojnĂ« argumente referencĂ« me atributin «const».
- «-Wimplicit-const-int-float-conversion» â paralajmĂ«rim i aktivizuar si parazgjedhje pĂ«r konvertimin e paqĂ«llimshĂ«m tĂ« konstantĂ«s me presje nĂ« tipin e plotĂ«.
- Për platformën ARM janë ofruar funksione të integruara në kompilatorin C (), të cilat zëvendësohen me instrukcione efektive vektoriale Arm v8.1-M MVE dhe CDE. Funksionet e disponueshme janë të përkufizuara në skedarët e titujve arm_mve.h dhe arm_cde.h.
- grup i tipeve të zgjeruara të plotë _ExtInt(N), të cilat lejojnë krijimin e tipeve që nuk janë shumëfish i fuqive dy, të cilat mund të përpunohen në mënyrë efikase në FPGA/HLS. , _ExtInt(7) përcakton një tip të plotë, i përbërë nga 7 bit.
- Shtuar makros të cilat përcaktojnë mbështetje për funksionet e integruara në C të bazuara në instrukcionet ARM SVE (Scalable Vector Extension):
__ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
__ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
__ARM_FEATURE_SVE_MATMUL_INT8,
__ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
__ARM_FEATURE_SVE2_BITPERM,
__ARM_FEATURE_SVE2_SHA3,
__ARM_FEATURE_SVE2_SM4. P.sh., makroja __ARM_FEATURE_SVE përcaktohet kur gjenerohet kodi AArch64 me vendosjen e mundësisë në vijën e komandave «-march=armv8-a+sve». - Flamuri «-O» tani identifikohet me modin e optimizimit «-O1» në vend të «-O2».
- Shtuar flamuj të rinj kompilatorësh:
- «-fstack-clash-protection» â aktivizon mbrojtjen kundĂ«r .
- «-ffp-exception-behavior={ignore,maytrap,strict}» â lejon zgjedhjen e modit tĂ« trajtuesit tĂ« pĂ«rjashtimeve pĂ«r numrat me pikĂ« flottante.
- «-ffp-model={precise,strict,fast}» â thjeshton qasjen nĂ« njĂ« seri opsionesh tĂ« specializuara pĂ«r numrat me pikĂ« flottante.
- «-fpch-codegen» dhe «-fpch-debuginfo» për gjenerimin e një titulli të përkompiliuar (PCH) me skedarë objektiv të veçantë për kodin dhe debuginfo.
- «-fsanitize-coverage-allowlist» dhe «-fsanitize-coverage-blocklist» për kontrollin e listave të lejuara dhe të ndaluara për mbulimin e testeve.
- «-mtls-size={12,24,32,48}» për të zgjedhur madhësinë e TLS (storage-i lokal të thread-eve).
- «-menable-experimental-extension» për aktivizimin e zgjerimeve eksperimentale RISC-V.
- Për default për C është aplikuar mënyra «-fno-common», e cila lejon përmirësimin e efikasitetit të aksesit në variabla globalë në disa platforma.
- Cache e moduleve tani është zhvendosur nga /tmp në direktorinë ~/.cache. Përdorni flagun «-fmodules-cache-path=» për të tejkaluar këtë.
- Standardi i përdorur për gjuhën C është përditësuar nga gnu11 në gnu17.
- Shtuar mbështetje paraprake për zgjerimin GNU C «» për të shtuar mysql_insert_id. Zgjerimi aktualisht analizohen, por nuk përpunohen.
- Shtuar mundësi të zgjeruara për mbështetje OpenCL dhe CUDA. Shtuar mbështetje diagnostike për blloqet OpenCL 2.0 dhe realizuar mundësi të reja OpenMP 5.0.
- Në mjetin clang-format është shtuar opsioni IndentExternBlock për rregullimin brenda blloqeve extern «C» dhe extern «C++».
- Në analizuesin statik është përmirësuar trajtimi i konstruktorëve të trashëguar në C++. Shtuar kontrollime të reja alpha.core.C11Lock dhe alpha.fuchsia.Lock për trajtimin e bllokimeve, alpha.security.cert.pos.34c për identifikimin e përdorimit të pasigurt të putenv, webkit.NoUncountedMemberChecker dhe webkit.RefCntblBaseVirtualDtor për identifikimin e problemeve me tipet e paqëndrueshme, alpha.cplusplus.SmartPtr për kontrollin e dereferencës së një treguesi të pamundur.
- Në linter clang-tidy ka një sasi të madhe kontrollesh të reja.
- Në serverin e keƥimit clangd (Clang Server) është përmirësuar performanca dhe janë shtuar mundësi të reja diagnostikimi.
Ndryshimet kryesore LLVM 11.0:
- Sistemi i ndërtimit është transferuar për të përdorur Python 3. Nëse Python 3 nuk është i disponueshëm, është realizuar mundësia e rikthimit në përdorimin e Python 2.
- Frontend-i me kompilatorin për gjuhën Go (llgo) është përjashtuar nga publikimi, i cili mund të ristrukturohet në të ardhmen.
- Në reprezentimin ndërmjetës (IR) është shtuar atributi vector-function-abi-variant për të përshkruar mapimin midis funksioneve skalar dhe vektor për vektorizimin e thirrjeve. Nga llvm::VectorType janë identifikuar dy lloje vektorësh të veçantë llvm::FixedVectorType dhe llvm::ScalableVectorType.
- ĂshtĂ« pranuar si sjellje e pacaktuar ndarja nĂ« bazĂ« tĂ« vlerave udef dhe kalimi i vlerave undef nĂ« funksionet e bibliotekĂ«s standarde. NĂ«
memset/memcpy/memmove lejohet kalimi i treguesve undef, por nĂ«se parametri me madhĂ«si Ă«shtĂ« zero. - NĂ« LLJIT Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r pĂ«rfundimin e inicializimeve statike pĂ«rmes metodave LLJIT::initialize dhe LLJIT::deinitialize. ĂshtĂ« realizuar mundĂ«sia e shtimit tĂ« bibliotekave statike nĂ« JITDylib pĂ«rmes klasĂ«s StaticLibraryDefinitionGenerator. ĂshtĂ« shtuar API C pĂ«r (API pĂ«r ndĂ«rtimin e JIT-kompilatorĂ«ve).
- NĂ« backend-in pĂ«r arkitekturĂ«n AArch64 Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r procesorĂ«t Cortex-A34, Cortex-A77, Cortex-A78 dhe Cortex-X1. JanĂ« implementuar zgjerimet ARMv8.2-BF16 (BFloat16) dhe ARMv8.6-A, duke pĂ«rfshirĂ« RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Virtualizimi i MonitorĂ«ve tĂ« Aktivitetit) dhe ARMv8.0-DGH (Data gathering hint). ĂshtĂ« siguruar mundĂ«sia e gjenerimit tĂ« kodit pĂ«r funksionet e integruara-ndihmĂ«se pĂ«r instrukcionet vektoriale SVE.
- Në backend-in për arkitekturën ARM është shtuar mbështetje për procesorët Cortex-M55, Cortex-A77, Cortex-A78 dhe Cortex-X1. Janë implementuar zgjerimet
Armv8.6-A Matrix Multiply dhe RMv8.2-AA32BF16 BFloat16. - Në backend-in për arkitekturën PowerPC është shtuar mbështetje për gjenerimin e kodit për procesorët POWER10. Janë zgjeruar optimizimet e cikleve dhe është përmirësuar mbështetja për operacionet me pikë të lëshuar.
- Në backend-in për arkitekturën RISC-V është lejuar pranimi i patch-ëve me mbështetje për sete instrukcionesh eksperimentale të zgjeruara, të cilat nuk janë miratuar akoma zyrtarisht.
- Backend-i për arkitekturën AVR është transferuar nga kategoria eksperimentale në ato stabile, të përfshira në paketën themelore.
- NĂ« backend-in pĂ«r arkitekturĂ«n x86 Ă«shtĂ« realizuar mbĂ«shtetje pĂ«r instrukcionet Intel AMX dhe TSXLDTRK. ĂshtĂ« shtuar mbrojtja nga sulmet. (Load Value Injection), gjithashtu Ă«shtĂ« realizuar njĂ« mekanizĂ«m i pĂ«rbashkĂ«t pĂ«r Shtypjen e Efekteve anĂ«sore tĂ« Ekzekutimit Spekullues pĂ«r tĂ« bllokuar sulmet e shkaktuara nga ekzekutimi spekullues i operacioneve nĂ« CPU.
- Në backend për arkitekturën SystemZ është shtuar mbështetje për MemorySanitizer dhe LeakSanitizer.
- Në Libc++ është shtuar mbështetje për skedarin e titujve me konstantet matematikore. .
- mundĂ«sitĂ« e lidhĂ«sit LLD. ĂshtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r formatin ELF, pĂ«rfshirĂ« shtimin e opsioneve «âlto-emit-asm», «âlto-whole-program-visibility», «âprint-archive-stats», «âshuffle-sections», «âthinlto-single-module», «âunique», «ârosegment», «âthreads=N». ĂshtĂ« shtuar opsioni «âtime-trace» pĂ«r ruajtjen e gjurmĂ«s nĂ« njĂ« skedar, i cili pastaj mund tĂ« analizohet pĂ«rmes ndĂ«rfaqes chrome://tracing nĂ« Chrome.
Burimi: opennet.ru
