Tso tawm ntawm LLVM 16.0 compiler suite

Tom qab rau lub hlis ntawm txoj kev loj hlob, qhov kev tso tawm ntawm LLVM 16.0 qhov project tau nthuav tawm - GCC-tshaj cov cuab yeej (compilers, optimizers thiab code generators) uas muab cov kev pab cuam rau hauv nruab nrab bitcode ntawm RISC-zoo li cov lus qhia virtual (qib qis-theem virtual tshuab nrog a multi-level optimization system). Lub generated pseudocode tuaj yeem hloov dua siab tshiab siv JIT compiler rau hauv cov lus qhia tshuab ncaj qha thaum lub sijhawm ua haujlwm.

Kev txhim kho loj hauv Clang 16.0:

  • Lub neej ntawd C ++ / ObjC ++ tus qauv yog gnu ++ 17 (yav dhau los gnu ++ 14), uas txhais tau tias C ++ 17 nta nrog GNU txuas ntxiv tau txais kev txhawb nqa los ntawm lub neej ntawd. Txhawm rau rov qab tus cwj pwm yav dhau los, koj tuaj yeem siv qhov "-std = gnu ++ 14" kev xaiv.
  • Ua tiav cov yam ntxwv siab heev ntsig txog C ++ 20 tus qauv:
    • Conditionally tsis tseem ceeb cov tswv cuab tshwj xeeb ua haujlwm,
    • ntes cov qauv kev sib khi hauv cov haujlwm lambda,
    • Equality tus neeg teb xov tooj hauv cov lus hais,
    • Kev xaiv kom tshem tawm cov npe lo lus tseem ceeb hauv qee qhov ntsiab lus,
    • Siv tau aggregate pib nyob rau hauv kab lus (β€œAgr(val1, val2)”).
  • Cov yam ntxwv uas tau hais tseg yav tom ntej C ++ 2b tus qauv tau ua tiav:
    • Nws raug tso cai tso cov ntawv lo rau qhov kawg ntawm cov kab lus sib xyaw,
    • static operator(),
    • static operator[],
    • Compatibility nrog char8_t hom yog guaranteed,
    • Qhov ntau ntawm cov cim tso cai rau siv hauv "\N{...}" tau nthuav dav
    • Ntxiv qhov muaj peev xwm siv cov hloov pauv tau tshaj tawm tias "zoo li qub constexpr" hauv cov haujlwm tshaj tawm raws li constexpr.
  • Cov yam ntxwv uas tau hais tseg yav tom ntej C-tus qauv C2x tau raug coj los siv:
    • Txhawm rau lov tes taw "-Wunused-label" ceeb toom, "[[maybe_unused]]" tus cwj pwm raug tso cai siv rau cov ntawv
    • Nws raug tso cai tso cov ntawv nyob qhov twg hauv cov kab lus sib xyaw,
    • Ntxiv hom thiab typeof_unqual tswv,
    • Ib hom tshiab nullptr_t thiab nullptr tas li los txhais cov pointers null uas tuaj yeem hloov mus rau txhua hom pointer thiab sawv cev rau qhov txawv ntawm NULL uas tsis yog khi rau cov lej thiab void * hom.
    • Hauv C2x hom, hu rau va_start macro nrog tus lej sib txawv ntawm cov lus sib cav (variadic) raug tso cai.
  • Hauv C99, C11, thiab C17 ua raws hom, cov kev xaiv ua ntej "-Wimplicit-function-declaration" thiab "-Wimplicit-int" tam sim no tsim qhov yuam kev es tsis txhob ceeb toom.
  • Kev siv tsis ncaj ntawm "void *" (xws li "void func(void *p) { *p; }") hauv C ++ hom tam sim no tsim qhov yuam kev, zoo ib yam li ISO C ++, GCC, ICC thiab MSVC.
  • Kev qhia txog bitfields raws li kev qhia ua haujlwm (piv txwv li "__asm ​​​​{ mov eax, s.bf }") hauv Microsoft-style inline sib dhos blocks tam sim no tsim qhov yuam kev.
  • Ntxiv kev kuaj mob rau qhov muaj cov qauv sib txawv thiab cov koom haum nrog tib lub npe hauv cov qauv sib txawv.
  • Lub peev xwm cuam tshuam nrog OpenCL thiab OpenMP kev txhawb nqa tau nthuav dav. Txhim kho kev kuaj mob rau C ++ templates siv hauv OpenCL kernel sib cav. Txhim kho queuing thaiv kev txhawb nqa rau AMDGPU. Tus cwj pwm nounwind yog implicitly ntxiv rau txhua txoj haujlwm. Txhim kho kev txhawb nqa rau built-in functions.
  • Ntxiv lub peev xwm los siv CLANG_CRASH_DIAGNOSTICS_DIR ib puag ncig hloov pauv los txhais cov npe hauv cov ntaub ntawv kev kuaj mob sib tsoo raug cawm.
  • Kev them nyiaj yug Unicode tau hloov kho rau Unicode 15.0 specification. Qee cov cim lej raug tso cai hauv cov cim, xws li "β‚Š" (xws li "ob npaug xβ‚–β‚Šβ‚").
  • Ntxiv kev txhawb nqa rau kev thauj khoom ntau cov ntaub ntawv configuration (default configuration files yog loaded ua ntej, thiab tom qab ntawd cov uas teev ntawm "--config =" chij, uas tam sim no tau teev ntau zaus). Hloov lub neej ntawd loading kev txiav txim ntawm configuration ntaub ntawv: clang sim mus thauj cov ntaub ntawv ua ntej - .cfg, thiab yog tias nws tsis pom nws sim thauj ob cov ntaub ntawv .cfg ib .cfg ua. Txhawm rau lov tes taw loading configuration cov ntaub ntawv los ntawm lub neej ntawd, tus chij "--no-default-config" tau ntxiv.
  • Txhawm rau kom rov ua dua, nws tuaj yeem hloov pauv hnub tam sim no thiab lub sijhawm muaj txiaj ntsig hauv __DATE__, __TIME__ thiab __TIMESTAMP__ macros nrog lub sijhawm teev tseg hauv SOURCE_DATE_EPOCH ib puag ncig hloov pauv.
  • Txhawm rau txheeb xyuas qhov muaj nyob hauv cov haujlwm ua haujlwm (builtin) uas tuaj yeem siv rau hauv cov ntsiab lus ntawm qhov tsis tu ncua, macro "__has_constexpr_builtin" tau ntxiv.
  • Ntxiv tshiab tso ua ke chij "-fcoro-aligned-allocation" rau coroutine ncej faib.
  • "-fstrict-flex-arrays =" chij siv kev txhawb nqa rau qib thib peb ntawm kev txheeb xyuas cov ntsiab lus hloov tau yooj yim hauv cov qauv (Slexible Array Members, ib qho array ntawm indefinite loj ntawm qhov kawg ntawm cov qauv). Nyob rau theem thib peb, tsuas yog qhov loj "[]" (piv txwv li, "int b[]") raug kho raws li qhov hloov tau yooj yim, tab sis qhov loj "[0]" (piv txwv li, "int b[0]") tsis yog.
  • Ntxiv "-fmodule-output" chij kom pab tau ib-theem tso ua ke qauv rau tus qauv C ++ modules.
  • Ntxiv "-Rpass-analysis=stack-frame-layout" hom los pab txheeb xyuas cov teeb meem nrog pawg layout.
  • Ntxiv tus cwj pwm tshiab __attribute__((target_version("cpu_features")))) thiab txuas ntxiv ua haujlwm ntawm tus cwj pwm __attribute__((target_clones("cpu_features1","cpu_features2",...)))) los xaiv cov qauv tshwj xeeb ntawm cov yam ntxwv muab los ntawm AArch64 CPUs.
  • Diagnostic cuab yeej nthuav:
    • Ntxiv cov lus ceeb toom "-Wsingle-ntsis-bitfield-constant-conversion" txhawm rau txheeb xyuas qhov cuam tshuam tsis zoo thaum muab ib qho rau ib-ntsis kos npe bitfield.
    • Cov kev kuaj mob ntawm qhov sib txawv ntawm cov constexpr uas tsis tsim nyog tau nthuav dav.
    • Ntxiv "-Wcast-function-type-strict" thiab "-Wincompatible-function-pointer-types-strict" ceeb toom los txheeb xyuas cov teeb meem muaj peev xwm nrog cov haujlwm ua haujlwm casting.
    • Ntxiv kev kuaj mob rau kev siv cov npe tsis raug lossis tshwj tseg cov npe hauv cov ntawv xa tawm.
    • Txhim kho kev tshawb pom ntawm cov lo lus tseem ceeb "auto" uas ploj lawm hauv cov lus txhais.
    • Qhov kev siv ntawm "-Winteger-overflow" ceeb toom tau ntxiv cov tshev rau cov xwm txheej ntxiv uas ua rau muaj kev hla dhau.
  • Kev them nyiaj yug rau LoongArch kev qhia teeb tsa architecture (-march=loongarch64 lossis -march=la464), siv hauv Loongson 3 5000 processors thiab siv RISC ISA tshiab, zoo ib yam li MIPS thiab RISC-V, tau ua tiav.

Kev tsim kho tseem ceeb hauv LLVM 16.0:

  • LLVM code raug tso cai siv cov ntsiab lus teev tseg hauv C ++ 17 tus qauv.
  • Cov kev cai ib puag ncig rau kev tsim LLVM tau nce ntxiv. Cov cuab yeej tsim yuav tsum tam sim no txhawb C ++ 17 tus qauv, piv txwv li. Txhawm rau tsim, koj xav tau tsawg kawg GCC 7.1, Clang 5.0, Apple Clang 10.0 lossis Visual Studio 2019 16.7.
  • Lub backend rau AArch64 architecture ntxiv kev txhawb nqa rau Cortex-A715, Cortex-X3 thiab Neoverse V2 CPUs, assembler rau RME MEC (Memory Encryption Contexts), Armv8.3 extensions (Complex Number) thiab Function Multi Versioning.
  • Hauv backend rau ARM architecture, kev txhawb nqa rau Armv2, Armv2A, Armv3 thiab Armv3M lub hom phiaj platforms tau raug txiav tawm, uas cov cim tsim nyog tsis tau lees paub. Ntxiv lub peev xwm los tsim cov lej rau cov lus qhia ua haujlwm nrog cov lej nyuaj.
  • Lub backend rau X86 architecture tau ntxiv kev txhawb nqa rau cov kev qhia teeb tsa architectures (ISA) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Ntxiv kev txhawb nqa rau RDMSRLIST, RMSRLIST thiab WRMSRNS cov lus qhia. Kev xaiv "-mcpu = raptorlake", "-mcpu = meteorlake", "-mcpu = emeraldrapids", "-mcpu = sierraforest", "-mcpu = graniterapids" thiab "-mcpu = grandridge".
  • Ntxiv kev txhawb nqa rau LoongArch platform.
  • Txhim kho backends rau MIPS, PowerPC thiab RISC-V architectures
  • Ntxiv kev txhawb nqa rau kev debugging 64-ntsis executables rau LoongArch architecture rau LLDB debugger. Txhim kho kev tuav ntawm COFF debug cim. Muab kev lim dej ntawm duplicate DLLs nyob rau hauv daim ntawv teev cov loaded Windows modules.
  • Hauv lub tsev qiv ntawv Libc ++, txoj haujlwm tseem ceeb tau tsom mus rau kev siv kev txhawb nqa rau cov yam ntxwv tshiab ntawm C ++ 20 thiab C ++ 23 tus qauv.
  • LDD linker txo qis lub sijhawm sib txuas los ntawm kev sib piv qhov chaw nyob txav chaw txheeb xyuas thiab ntu pib ua haujlwm. Ntxiv kev txhawb nqa rau ntu compression siv ZSTD algorithm.

Tau qhov twg los: opennet.ru

Ntxiv ib saib