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:

  • Garantiitaj vostaj alvokoj (alvoko al subrutino ĉe la fino de funkcio, kreante vostan rikuron se la subrutino vokas sin mem) nun estas subtenataj. Garantiitaj vostaj alvokoj estas subtenataj uzante la atributon "[[clang::musttail]]" en C++ kaj "__attribute__((musttail))" en C, uzata en la deklaro "return". Ĉi tiu funkcio ebligas optimumigojn per platigo de kodo en platan iteracion por ŝpari stakspacon.
  • Atributaj difinoj laŭ C++11 nun estas subtenataj en klang-deklaracioj kaj etendaĵoj "uzantaj", uzante la formaton "[[]]".
  • Aldonis la flagon "-Wreserved-identifier" por montri averton dum specifado de rezervitaj identigiloj en uzantkodo.
  • Aldonis la flagojn "-Wunused-but-set-parameter" kaj "-Wunused-but-set-variable" por presi averton se parametro aŭ variablo estas agordita sed ne uzata.
  • Aldonis la flagon "-Wnull-pointer-subtraction" por averti ĉu kodo povus kaŭzi nedifinitan konduton pro la uzo de nula montrilo en subtrahoperacioj.
  • Aldonita flago "-fstack-usage" por generi por ĉiu koddosiero plian ".su" dosieron enhavantan informojn pri la grandeco de stakkadroj por ĉiu funkcio difinita en la prilaborata dosiero.
  • La statika analizilo havas novan eligan tipon, "sarif-html", kiu generas raportojn en kaj HTML kaj Sarif formatoj. Nova kontrolo, allocClassWithName, estis aldonita. La opcio "-analyzer-display-progress" nun montras la analiztempon por ĉiu funkcio. La inteligenta montrilanalizilo (alpha.cplusplus.SmartPtr) estas preskaŭ kompleta.
  • OpenCL-subteno estis vastigita. Subteno por la novaj kromprogramoj cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields, kaj __cl_clang_non_portable_kernel_param_types estis aldonita. La efektivigo de la OpenCL 3.0-specifo estis daŭrigita. Por C, OpenCL 1.2 estas uzata defaŭlte krom se alia versio estas eksplicite elektita. Subteno por dosieroj kun la kromprogramo ".clcpp" estis aldonita por C++.
  • Subteno por direktivoj pri buklotransformo ("#pragma omp unrol" kaj "#pragma omp tile") difinitaj en la specifo OpenMP 5.1 estas efektivigita.
  • La ilo clang-format estis ĝisdatigita kun la jenaj opcioj: SpacesInLineCommentPrefix por specifi la nombron de spacetoj antaŭ komentoj, IndentAccessModifiers, LambdaBodyIndentation, kaj PPIndentWidth por kontroli la vicigon de rikordoj, lambda-esprimoj, kaj antaŭprocesoraj direktivoj. La kapabloj ordigi la liston de kapdosieraj dosieroj (SortIncludes) estis vastigitaj. Subteno por JSON-dosiera formatado estis aldonita.
  • Granda nombro da novaj ĉekoj estis aldonita al la klang-orda linter.

Ŝlosilaj novigoj en LLVM 13.0:

  • Aldonita opcio "-ehcontguard" por uzi CET-teknologion (Windows Teknologio de Devigo de Kontrolfluo) por protekto en la stadio de esceptotraktado kontraŭ la plenumo de ekspluatoj konstruitaj uzante reven-orientitajn programajn (ROP) teknikojn.
  • La projekto debuginfo-test estis renomita al cross-project-tests kaj estas destinita por testi komponantojn el malsamaj projektoj, ne limigite al sencimigaj informoj.
  • La konstrusistemo subtenas la konstruadon de pluraj distribuaĵoj, ekzemple, unu kun iloj kaj la alia kun bibliotekoj por programistoj.
  • La interna programaro por la arkitekturo AArch64 efektivigas subtenon por la etendaĵoj Armv9-A RME (Realm Management Extension) kaj SME (Scalable Matrix Extension) en asemblero.
  • Subteno por ISA V68/HVX estis aldonita al la interna arkitekturo de Hexagon.
  • La x86-fona sistemo plibonigis subtenon por AMD Zen 3-procesoroj.
  • Subteno por la GFX1013 RDNA2 APU estis aldonita al la AMDGPU-fonto.
  • Libc++ daŭre efektivigas novajn funkciojn de la normoj C++20 kaj C++2b, inkluzive de la kompletigo de la biblioteko "konceptoj". Por la platformo Windows Aldonita subteno por std::filesystem bazita sur MinGW. Kapdosieroj estas apartigitaj. , Kaj Aldonis la konstruopcion LIBCXX_ENABLE_INCOMPLETE_FEATURES por malŝalti kapdosierojn kun nekompleta funkcio.
  • La LLD-ligilo estis vastigita por subteni Big-endian Aarch64-procesorojn, kaj la Mach-O-fonto estis plibonigita por ebligi ligadon de normaj programoj. Plibonigoj necesaj por ligi Glibc per LLD estis inkluzivitaj.
  • La ilo llvm-mca (Maŝina Kodanalizilo) estis ĝisdatigita por subteni procesorojn, kiuj plenumas instrukciojn laŭorde (laŭorda superskalara dukto), kiel ekzemple la ARM Cortex-A55.
  • La erarserĉilo LLDB por la platformo AArch64 nun plene subtenas montrilan aŭtentigon, la mekanismon Memory Tagging Extension (Memory Tagging Extension), kaj SVE-registrojn. Komandoj estis aldonitaj por asocii etikedojn kun ĉiu memorasigna operacio kaj por certigi, ke la montrilo estas asociita kun la ĝusta etikedo dum memoraliro.
  • La LLDB-erarserĉilo kaj la Fortran-interfaco, Flang, estis aldonitaj al la duumaj asembleoj generitaj de la projekto.

fonto: opennet.ru

Aĉetu fidindan gastigadon por retejoj kun DDoS-protekto, VPS-VDS-serviloj 🔥 Aĉetu fidindan retejan gastigadon kun DDoS-protekto, VPS VDS-servilojn | ProHoster