Kutulutsidwa kwa LLVM 16.0 compiler suite

Pambuyo pa miyezi isanu ndi umodzi ya chitukuko, kutulutsidwa kwa pulojekiti ya LLVM 16.0 kunaperekedwa - chida chogwirizana ndi GCC (compilers, optimizers ndi code generator) chomwe chimasonkhanitsa mapulogalamu mu bitcode yapakatikati ya RISC-monga malangizo enieni (makina otsika omwe ali ndi Multilevel optimization system). Pseudocode yopangidwa ikhoza kusinthidwa pogwiritsa ntchito JIT compiler kukhala malangizo amakina mwachindunji panthawi yokonza pulogalamu.

Kusintha kwakukulu mu Clang 16.0:

  • Muyezo wa C++/ObjC++ ndi gnu++17 (omwe kale anali gnu+++14), kutanthauza kuti C++17 zokhala ndi zowonjezera za GNU zimathandizidwa ndi kusakhazikika. Kuti mubweze zomwe zidachitika kale, mutha kugwiritsa ntchito njira ya "-std=gnu++14".
  • Kukhazikitsa zida zapamwamba zokhudzana ndi muyezo wa C++20:
    • Mamembala apadera ang'onoang'ono,
    • kugwira zomangira zokhazikika mu ntchito za lambda,
    • Equality operator mkati mwa mawu,
    • Kusankha kusiya dzina lachidziwitso muzinthu zina,
    • Kuyambitsa kovomerezeka kovomerezeka m'makolo (“Aggr(val1, val2)”).
  • Zomwe zafotokozedwa m'tsogolomu C++2b zakhazikitsidwa:
    • Amaloledwa kuyika zilembo kumapeto kwa mawu apawiri,
    • static operator (),
    • static operator[],
    • Kugwirizana ndi mtundu wa char8_t kumatsimikiziridwa,
    • Kusiyanasiyana kwa zilembo zomwe zaloledwa kugwiritsidwa ntchito mu "\N{...}" zawonjezedwa
    • Anawonjezera kuthekera kogwiritsa ntchito zosinthika zomwe zatchulidwa kuti "static constexpr" muzochita zolengezedwa ngati constexpr.
  • Zomwe zafotokozedwa m'tsogolomu C-standard C2x zakhazikitsidwa:
    • Kuti mulepheretse chenjezo la "-Wunused-label", mawonekedwe a "[[mwina_osagwiritsidwa ntchito]]" amaloledwa kugwiritsidwa ntchito pazolemba.
    • Amaloledwa kuyika zilembo paliponse m'mawu apawiri,
    • Owonjezera typeof ndi typeof_unqual operators,
    • Mtundu watsopano wa nullptr_t ndi nullptr constant kutanthauzira null pointer yomwe imatha kusinthira ku mtundu uliwonse wa pointer ndikuyimira mtundu wa NULL womwe sugwirizana ndi mitundu yonse ndi zopanda pake *.
    • Munjira ya C2x, kuyimba va_start macro ndi mikangano yosiyanasiyana (variadic) ndiyololedwa.
  • Mumitundu yotsatirira ya C99, C11, ndi C17, zosankha zosasinthika "-Wimplicit-function-declaration" ndi "-Wimplicit-int" tsopano zimatulutsa cholakwika m'malo mwa chenjezo.
  • Kugwiritsa ntchito molakwika "void *" (monga "void func(void *p) { *p; }") mu C++ mode tsopano kumabweretsa cholakwika, chofanana ndi ISO C++, GCC, ICC ndi MSVC.
  • Kutchula ma bitfields ngati njira zophunzitsira (monga "__asm ​​​​{mov eax, s.bf }") mu midadada yapaintaneti ya Microsoft tsopano kumabweretsa cholakwika.
  • Kuwunika kowonjezera kupezeka kwamagulu osiyanasiyana ndi mabungwe omwe ali ndi mayina omwewo mumagawo osiyanasiyana.
  • Mphamvu zolumikizidwa ndi OpenCL ndi OpenMP thandizo zakulitsidwa. Kuwunika kowongolera kwa ma tempulo a C++ ogwiritsidwa ntchito mu mikangano ya OpenCL kernel. Kupititsa patsogolo kuthandizira kwa queuing block kwa AMDGPU. Chizindikiro cha nonwind chimawonjezedwa kuzinthu zonse. Thandizo labwino la ntchito zomangidwira.
  • Yawonjeza kuthekera kogwiritsa ntchito CLANG_CRASH_DIAGNOSTICS_DIR zosintha za chilengedwe kuti mufotokozere dawunilodi momwe data yowunikira ngozi idasungidwa.
  • Thandizo la Unicode lasinthidwa ku Unicode 15.0. Zizindikiro zina zamasamu zimaloledwa muzizindikiritso, monga "₊" (monga "double xₖ₊₁").
  • Thandizo lowonjezera pakutsitsa mafayilo osinthika angapo (mafayilo osinthira okhazikika amatsitsidwa kaye, kenako omwe amatchulidwa kudzera pa "--config="" mbendera, yomwe imatha kutchulidwa kangapo). Anasintha dongosolo losasinthika la mafayilo osinthira: Clang amayesa kutsitsa fayilo poyamba - .cfg, ndipo ngati sichipezeka imayesa kutsitsa mafayilo awiri .cfg ndi .cfg. Kuti mulepheretse kutsitsa mafayilo osinthika mwachisawawa, mbendera ya "-no-default-config" yawonjezedwa.
  • Kuti mutsimikizire zomanga zobwerezabwereza, ndizotheka kusintha masiku ndi nthawi zomwe zili mu __DATE__, __TIME__ ndi __TIMESTAMP__ macros ndi nthawi yotchulidwa mu SOURCE_DATE_EPOCH kusintha kwa chilengedwe.
  • Kuti muwone kukhalapo kwa ntchito zomangidwira (builtin) zomwe zingagwiritsidwe ntchito pazokhazikika, macro "__has_constexpr_builtin" yawonjezedwa.
  • Adawonjezedwanso mbendera yatsopano "-fcoro-aligned-allocation" pakugawika kwa chimango chogwirizana.
  • Mbendera ya "-fstrict-flex-arrays =" imathandizira gawo lachitatu lotsimikizira zinthu zosinthika mumagulu (Flexible Array Members, gulu la kukula kosawerengeka kumapeto kwa kapangidwe kake). Pamlingo wachitatu, kukula kokha "[]" (mwachitsanzo, "int b[]") kumatengedwa ngati gulu losinthika, koma kukula "[0]" (mwachitsanzo, "int b[0]") ayi.
  • Onjezani mbendera ya "-fmodule-output" kuti athe kuphatikiza gawo limodzi la ma module a C++.
  • Adawonjezedwa "-Rpass-analysis=stack-frame-layout" kuti athandizire kuzindikira zovuta ndi masanjidwe azithunzi.
  • Onjezani mawonekedwe atsopano __attribute__((target_version("cpu_features")))) ndikuwonjezera magwiridwe antchito a __attribute__((target_clones("cpu_features1","cpu_features2",...)))))))))))) CPUs.
  • Zida zowunikira zidawonjezedwa:
    • Chenjezo lowonjezera "-Wsingle-bit-bitfield-constant-conversion" kuti muzindikire kutsika kwapang'onopang'ono popereka gawo losayinidwa limodzi.
    • Kuzindikira kwa zosinthika za uninitialized constexpr kwakulitsidwa.
    • Onjezani machenjezo a "-Wcast-function-type-strict" ndi "-Wincompatible-function-pointer-types-strict" kuti azindikire zovuta zomwe zingachitike ndi mtundu wa ntchito.
    • Zowonjezera zowunikira pogwiritsa ntchito mayina olakwika kapena osungidwa m'ma block block.
    • Kuzindikira kwabwino kwa mawu osakira "auto" pamatanthauzidwe.
    • Kukhazikitsidwa kwa chenjezo la "-Winteger-overflow" kwawonjezera macheke azinthu zina zomwe zimapangitsa kusefukira.
  • Thandizo la zomangamanga za LoongArch (-march=loongarch64 kapena -march=la464), zomwe zimagwiritsidwa ntchito mu Loongson 3 5000 processors ndikukhazikitsa RISC ISA yatsopano, yofanana ndi MIPS ndi RISC-V, yakhazikitsidwa.

Zatsopano zazikulu mu LLVM 16.0:

  • Khodi ya LLVM imaloledwa kugwiritsa ntchito zinthu zomwe zafotokozedwa mulingo wa C++17.
  • Zofunikira zachilengedwe pomanga LLVM zawonjezeka. Zida zomangira ziyenera kuthandizira muyezo wa C ++ 17, mwachitsanzo. Kuti mumange, muyenera osachepera GCC 7.1, Clang 5.0, Apple Clang 10.0 kapena Visual Studio 2019 16.7.
  • Kumbuyo kwa kamangidwe ka AArch64 kumawonjezera chithandizo cha Cortex-A715, Cortex-X3 ndi Neoverse V2 CPUs, assembler for RME MEC (Memory Encryption Contexts), Armv8.3 extensions (Complex Number) ndi Function Multi Versioning.
  • Kumbuyo kwa kamangidwe ka ARM, kuthandizira kwa nsanja za Armv2, Armv2A, Armv3 ndi Armv3M zathetsedwa, zomwe kutulutsidwa kwa ma code olondola sikunatsimikizidwe. Anawonjezera luso lopanga ma code a malangizo ogwirira ntchito ndi manambala ovuta.
  • Kumbuyo kwa zomangamanga za X86 kwawonjezera chithandizo cha zomangamanga (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Thandizo lowonjezera la malangizo a RDMSRLIST, RMSRLIST ndi WRMSRNS. Zosankha zomwe zakhazikitsidwa "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" ndi "-mcpu=grandridge".
  • Anawonjezera chithandizo chovomerezeka cha nsanja ya LoongArch.
  • Kupititsa patsogolo kumbuyo kwa MIPS, PowerPC ndi RISC-V zomangamanga
  • Thandizo lowonjezera pakuchotsa zolakwika za 64-bit pazomanga za LoongArch ku LLDB debugger. Kuwongolera bwino kwa zizindikiro za COFF debug. Adapereka kusefa kwa ma DLL obwereza pamndandanda wamamodule odzaza Windows.
  • Mu laibulale ya Libc ++, ntchito yayikulu idangoyang'ana pakukhazikitsa chithandizo chazinthu zatsopano za C++20 ndi C++23.
  • Cholumikizira cha LDD chimachepetsa kwambiri nthawi yolumikizira pofananiza kusamutsa ma adilesi ndi ntchito zoyambitsa magawo. Thandizo lowonjezera la kukanikiza gawo pogwiritsa ntchito algorithm ya ZSTD.

Source: opennet.ru

Kuwonjezera ndemanga