Liberigo de la kompililo LLVM 13.0

Post ses monatoj da evoluo, la publikigo de la projekto LLVM 13.0 estis prezentita - GCC-kongrua ilaro (kompiloj, optimumigiloj kaj kodgeneratoroj) kiu kompilas programojn en mezan peckodon de RISC-similaj virtualaj instrukcioj (malaltnivela virtuala maŝino kun plurnivela optimumiga sistemo). La generita pseŭdokodo povas esti konvertita uzante JIT-kompililon en maŝininstrukciojn rekte dum programekzekuto.

Plibonigoj en Clang 13.0:

  • Efektivigita subteno por garantiitaj vostovokoj (vokado de subrutino ĉe la fino mem de funkcio, formante vosto-rekurson se la subrutino vokas sin). Subteno por garantiitaj vostovokoj estas disponigita per la "[[clang::musttail]]" atributo en C++ kaj "__attribute__((musttail))" en C, uzata en "return" deklaro. La funkcio ebligas al vi efektivigi optimumigojn per deplojado de kodo en plata ripeto por ŝpari stakan konsumon.
  • "uzante" deklarojn kaj clang-etendaĵojn provizas subtenon por difinado de C++11-stilaj atributoj uzante la "[[]]" formaton.
  • Aldonis la flagon "-Wreserved-identifier" por montri averton kiam vi specifas rezervitajn identigilojn en uzantkodo.
  • Aldonitaj flagoj "-Wunused-but-set-parameter" kaj "-Wunused-but-set-variable" por montri averton se parametro aŭ variablo estas agordita sed ne uzata.
  • Aldonita "-Wnull-pointer-subtraction" flago por eligi averton se la kodo eble enkondukos nedifinitan konduton pro la uzo de nula montrilo en subtraho operacioj.
  • Aldonita la flago "-fstack-usage" por generi por ĉiu koddosiero plian ".su" dosieron enhavantan informojn pri la grandeco de stakkadroj por ĉiu funkcio difinita en la dosiero prilaborita.
  • Nova eligo-tipo estis aldonita al la senmova analizilo - "sarif-html", kiu kondukas al la generacio de raportoj samtempe en HTML kaj Sarif-formatoj. Aldonita nova allocClassWithName ĉeko. Kiam oni specifas la opcion "-analyzer-display-progress", la analiza tempo de ĉiu funkcio estas montrata. La inteligenta montrilo-analizilo (alpha.cplusplus.SmartPtr) estas preskaŭ preta.
  • La kapabloj asociitaj kun OpenCL-subteno estis vastigitaj. Aldonita subteno por novaj etendaĵoj cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields kaj __cl_clang_non_portable_kernel_param_types. La efektivigo de la specifo OpenCL 3.0 daŭris. Por C, la specifo OpenCL 1.2 estas uzata defaŭlte krom se alia versio estas eksplicite elektita. Por C++, subteno por dosieroj kun la etendo ".clcpp" estis aldonita.
  • Subteno por buklotransformdirektivoj ("#pragma omp unrol" kaj "#pragma omp kahelo") difinitaj en la specifo de OpenMP 5.1 estis efektivigita.
  • Aldonitaj opcioj al la clang-formata ilo: SpacesInLineCommentPrefix por difini la nombron da spacoj antaŭ komentoj, IndentAccessModifiers, LambdaBodyIndentation kaj PPIndentWidth por kontroli la vicigon de enskriboj, lambda-esprimoj kaj antaŭprocesoraj direktivoj. La eblecoj por ordigi la listigon de kapdosieroj (SortIncludes) estis pligrandigitaj. Aldonita subteno por formatado de JSON-dosieroj.
  • Granda parto de novaj ĉekoj estis aldonita al linter clang-tidy.

Ŝlosilaj novigoj en LLVM 13.0:

  • Aldonis la opcion "-ehcontguard" por uzi teknologion CET (Windows Control-flow Enforcement Technology) por protekti kontraŭ la ekzekuto de ekspluatoj konstruitaj per Reven-Orientita Programado (ROP) teknikoj ĉe la escepta manipulado.
  • La debuginfo-test-projekto estis renomita trans-projekt-testoj kaj estas dizajnita por testi komponentojn de malsamaj projektoj, ne limigitaj al senararigado de informoj.
  • La kunigsistemo provizas subtenon por konstrui plurajn distribuojn, ekzemple, unu kun utilecoj, kaj la alia kun bibliotekoj por programistoj.
  • En la backend por la AArch64-arkitekturo, subteno por la Armv9-A RME (Realm Management Extension) kaj SME (Scalable Matrix Extension) etendaĵoj estas efektivigita en la asemblero.
  • Subteno por ISA V68/HVX estis aldonita al la backend por la Hexagon-arkitekturo.
  • La backend x86 plibonigis subtenon por AMD Zen 3-procesoroj.
  • Aldonita subteno por GFX1013 RDNA2 APU al la AMDGPU backend.
  • Libc++ daŭre efektivigas novajn funkciojn de la C++20 kaj C++2b-normoj, inkluzive de la kompletigo de la "koncepto-" biblioteko. Aldonita subteno por std::dosiersistemo por la Vindoza platformo bazita en MinGW. La kapdosieroj , kaj estas apartigitaj. Aldonita konstruopcio LIBCXX_ENABLE_INCOMPLETE_FEATURES por malŝalti kapdosierojn kun ne plene efektivigita funkcieco.
  • La kapabloj de la LLD-ligilo estis vastigitaj, en kiu subteno por Big-endian Aarch64-procesoroj estas efektivigita, kaj la Mach-O-backend estis alportita al stato kiu permesas ligi regulajn programojn. Inkluditaj plibonigoj necesaj por ligi Glibc per LLD.
  • La llvm-mca (Maŝina Kodo-Analizilo) aldonis subtenon por procesoroj kiuj plenumas instrukciojn en ordo (en-orda superskala dukto), kiel ekzemple la ARM Cortex-A55.
  • La LLDB-sencimigilo por la AArch64-platformo provizas plenan subtenon por Pointer Authentication, MTE (MemTag, Memory Tagging Extension) kaj SVE-registroj. Aldonitaj komandoj, kiuj ebligas al vi ligi etikedojn al ĉiu memor-asigna operacio kaj organizi kontrolon de la montrilo dum aliro al memoro, kiu devas esti asociita kun la ĝusta etikedo.
  • La LLDB-sencimigilo kaj la fasado por la lingvo Fortran - Flang estis aldonitaj al la binaraj asembleoj generitaj de la projekto.

fonto: opennet.ru

Aldoni komenton