Paglabas ng LLVM 13.0 compiler suite

Pagkatapos ng anim na buwan ng pag-unlad, ipinakita ang paglabas ng proyekto ng LLVM 13.0 - isang toolkit na katugma sa GCC (mga compiler, optimizer at code generator) na nagsasama-sama ng mga programa sa intermediate bitcode ng tulad ng RISC na virtual na mga tagubilin (isang mababang antas na virtual machine na may isang multi-level optimization system). Ang nabuong pseudocode ay maaaring ma-convert gamit ang isang JIT compiler sa mga tagubilin sa makina nang direkta sa oras ng pagpapatupad ng programa.

Mga Pagpapabuti sa Clang 13.0:

  • Ipinatupad ang suporta para sa mga garantisadong tail call (pagtawag ng subroutine sa pinakadulo ng isang function, na bumubuo ng tail recursion kung ang subroutine mismo ang tumawag). Ang suporta para sa mga garantisadong tail call ay ibinibigay ng attribute na "[[clang::musttail]]" sa C++ at "__attribute__((musttail))" sa C, na ginagamit sa isang "return" statement. Binibigyang-daan ka ng tampok na ipatupad ang mga pag-optimize sa pamamagitan ng pag-deploy ng code sa isang patag na pag-ulit upang i-save ang pagkonsumo ng stack.
  • Ang "paggamit" ng mga deklarasyon at clang extension ay nagbibigay ng suporta para sa pagtukoy ng C++11-style na mga katangian gamit ang "[[]]" na format.
  • Idinagdag ang flag na "-Wreserved-identifier" upang magpakita ng babala kapag ang mga nakareserbang identifier ay tinukoy sa user code.
  • Nagdagdag ng mga flag na "-Wunused-but-set-parameter" at "-Wunused-but-set-variable" upang magpakita ng babala kung nakatakda ang isang parameter o variable ngunit hindi ginagamit.
  • Idinagdag ang flag na "-Wnull-pointer-subtraction" upang magbigay ng babala kung ang code ay maaaring magpakilala ng hindi natukoy na gawi dahil sa paggamit ng null pointer sa mga pagpapatakbo ng pagbabawas.
  • Idinagdag ang flag na "-fstack-usage" upang bumuo para sa bawat code file ng karagdagang ".su" file na naglalaman ng impormasyon tungkol sa laki ng mga stack frame para sa bawat function na tinukoy sa file na pinoproseso.
  • Ang isang bagong uri ng output ay naidagdag sa static analyzer - "sarif-html", na humahantong sa pagbuo ng mga ulat nang sabay-sabay sa HTML at Sarif na mga format. Nagdagdag ng bagong allocClassWithName check. Kapag tinukoy ang opsyong "-analyzer-display-progress", ang oras ng pagsusuri ng bawat function ay ipinapakita. Ang smart pointer analyzer (alpha.cplusplus.SmartPtr) ay halos handa na.
  • Ang mga kakayahan na nauugnay sa suporta ng OpenCL ay pinalawak. Nagdagdag ng suporta para sa mga bagong extension na cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields at __cl_clang_non_portable_kernel_param_types. Nagpatuloy ang pagpapatupad ng pagtutukoy ng OpenCL 3.0. Para sa C, ang pagtutukoy ng OpenCL 1.2 ay ginagamit bilang default maliban kung ang isa pang bersyon ay tahasang pinili. Para sa C++, idinagdag ang suporta para sa mga file na may extension na ".clcpp".
  • Naipatupad ang suporta para sa mga direktiba sa pagbabagong-anyo ng loop (β€œ#pragma omp unrol” at β€œ#pragma omp tile”) na tinukoy sa detalye ng OpenMP 5.1.
  • Nagdagdag ng mga opsyon sa clang-format na utility: SpacesInLineCommentPrefix upang tukuyin ang bilang ng mga puwang bago ang mga komento, IndentAccessModifiers, LambdaBodyIndentation at PPIndentWidth upang kontrolin ang pagkakahanay ng mga entry, lambda expression at preprocessor na mga direktiba. Ang mga posibilidad para sa pag-uuri ng enumeration ng mga header file (SortIncludes) ay pinalawak. Nagdagdag ng suporta para sa pag-format ng mga JSON file.
  • Malaking bahagi ng mga bagong tseke ang naidagdag sa linter clang-tidy.

Mga pangunahing inobasyon sa LLVM 13.0:

  • Idinagdag ang opsyong β€œ-ehcontguard” upang gamitin ang teknolohiyang CET (Windows Control-flow Enforcement Technology) upang maprotektahan laban sa pagsasagawa ng mga pagsasamantalang binuo gamit ang mga diskarteng Return-Oriented Programming (ROP) sa yugto ng paghawak ng exception.
  • Ang proyekto ng debuginfo-test ay pinalitan ng pangalan na mga cross-project-test at idinisenyo upang subukan ang mga bahagi mula sa iba't ibang mga proyekto, hindi limitado sa impormasyon sa pag-debug.
  • Ang sistema ng pagpupulong ay nagbibigay ng suporta para sa pagbuo ng ilang mga distribusyon, halimbawa, ang isa ay may mga kagamitan, at ang isa ay may mga aklatan para sa mga developer.
  • Sa backend para sa arkitektura ng AArch64, ang suporta para sa mga extension ng Armv9-A RME (Realm Management Extension) at SME (Scalable Matrix Extension) ay ipinatupad sa assembler.
  • Ang suporta para sa ISA V68/HVX ay idinagdag sa backend para sa arkitektura ng Hexagon.
  • Ang backend ng x86 ay nagpabuti ng suporta para sa mga processor ng AMD Zen 3.
  • Nagdagdag ng suporta para sa GFX1013 RDNA2 APU sa AMDGPU backend.
  • Ang Libc++ ay patuloy na nagpapatupad ng mga bagong feature ng C++20 at C++2b na pamantayan, kabilang ang pagkumpleto ng "concepts" library. Nagdagdag ng suporta para sa std::filesystem para sa MinGW-based na Windows platform. Pinaghiwalay ang mga file ng header , At . Idinagdag ang opsyon sa pagbuo LIBCXX_ENABLE_INCOMPLETE_FEATURES upang i-disable ang mga file ng header na hindi ganap na naipatupad ang functionality.
  • Ang mga kakayahan ng LLD linker ay pinalawak, kung saan ang suporta para sa Big-endian Aarch64 processors ay ipinatupad, at ang Mach-O backend ay dinala sa isang estado na nagpapahintulot sa pag-link ng mga regular na programa. Mga kasamang pagpapahusay na kailangan para i-link ang Glibc gamit ang LLD.
  • Ang llvm-mca (Machine Code Analyzer) utility ay nagdagdag ng suporta para sa mga processor na nagsasagawa ng mga tagubilin sa pagkakasunud-sunod (in-order superscalar pipeline), gaya ng ARM Cortex-A55.
  • Ang LLDB debugger para sa AArch64 platform ay nagbibigay ng buong suporta para sa Pointer Authentication, MTE (MemTag, Memory Tagging Extension) at SVE registers. Nagdagdag ng mga utos na nagbibigay-daan sa iyo na magbigkis ng mga tag sa bawat operasyon ng paglalaan ng memorya at ayusin ang isang tseke ng pointer kapag ina-access ang memory, na dapat na nauugnay sa tamang tag.
  • Ang LLDB debugger at ang frontend para sa wikang Fortran - Flang ay idinagdag sa binary assemblies na nabuo ng proyekto.

Pinagmulan: opennet.ru

Magdagdag ng komento