Rhyddhau'r gyfres casglu LLVM 11.0

Ar ôl chwe mis o ddatblygiad wedi'i gyflwyno rhyddhau prosiect LLVM 11.0 - Offer sy'n gydnaws â GCC (cyfunwyr, optimizers a generaduron cod), llunio rhaglenni i god did canolradd o gyfarwyddiadau rhithwir tebyg i RISC (peiriant rhithwir lefel isel gyda system optimeiddio aml-lefel). Gellir trosi'r ffuggod a gynhyrchir gan ddefnyddio casglwr JIT yn gyfarwyddiadau peiriant yn uniongyrchol ar adeg gweithredu'r rhaglen.

Y newid allweddol yn y datganiad newydd oedd cynnwys Ystlys, frontend ar gyfer yr iaith Fortran. Mae Flang yn cefnogi Fortran 2018, OpenMP 4.5 ac OpenACC 3.0, ond nid yw datblygiad y prosiect wedi'i gwblhau eto ac mae'r pen blaen yn gyfyngedig i dosrannu cod a gwirio cywirdeb. Nid yw cynhyrchu cod canolradd LLVM wedi'i gefnogi eto ac i gynhyrchu ffeiliau gweithredadwy, mae cod canonaidd yn cael ei gynhyrchu a'i drosglwyddo i gasglwr Fortran allanol.

Gwelliannau yn Clang 11.0:

  • Ychwanegwyd y gallu i adfer y goeden gystrawen haniaethol (AST) ar gyfer cod C++ wedi'i dorri, y gellir ei ddefnyddio i helpu i wneud diagnosis o wallau ac sy'n darparu gwybodaeth ychwanegol i gyfleustodau allanol fel clang-tidy a clangd. Mae'r nodwedd wedi'i galluogi yn ddiofyn ar gyfer cod C++ ac fe'i rheolir trwy'r opsiynau "-Xclang -f[no-]recovery-ast".
  • Ychwanegwyd moddau diagnostig newydd:
    • Mae “-Wpointer-to-int-cast” yn grŵp o rybuddion ynghylch castio awgrymiadau at int math cyfanrif nad yw'n cynnwys yr holl werthoedd posibl.
    • “-Wuninitialized-const-reference” - rhybudd am basio newidynnau anghyfarwydd mewn paramedrau swyddogaeth sy'n derbyn dadleuon cyfeirio gyda'r priodoledd “const”.
    • " -Wimplicit-const-int-float-conversion" - wedi'i alluogi gan rybudd rhagosodedig ynghylch trosi cysonyn go iawn yn fath cyfanrif ymhlyg.
  • Ar gyfer y platfform ARM, darperir swyddogaethau C sydd wedi'u cynnwys yn y casglwr (Cynhenid), wedi'i ddisodli gan gyfarwyddiadau fector effeithlon Arm v8.1-M MVE a CDE. Mae'r swyddogaethau sydd ar gael wedi'u diffinio yn y ffeiliau pennyn arm_mve.h a arm_cde.h.
  • Wedi adio set o fathau cyfanrif estynedig _ExtInt(N), sy'n eich galluogi i greu mathau nad ydynt yn luosrifau o bwerau o ddau, y gellir eu prosesu'n effeithlon ar FPGA/HLS. Er enghraifft,, _ExtInt(7) yn diffinio math cyfanrif sy'n cynnwys 7 did.
  • Ychwanegwyd macros sy'n diffinio cefnogaeth ar gyfer swyddogaethau C adeiledig yn seiliedig ar gyfarwyddiadau ARM SVE (Estyniad Fector Scalable):
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    _ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    _ARM_FEATURE_SVE2_BITPERM,
    _ARM_FEATURE_SVE2_SHA3,
    _ARM_FEATURE_SVE2_SM4. Er enghraifft, diffinnir y macro __ARM_FEATURE_SVE wrth gynhyrchu cod AArch64 trwy osod yr opsiwn llinell orchymyn "-march=armv8-a+sve".

  • Mae'r faner "-O" bellach wedi'i nodi gyda'r modd optimeiddio "-O1" yn lle "-O2".
  • Ychwanegwyd baneri casglwr newydd:
    • "-fstack-clash-protection" - yn galluogi amddiffyniad yn erbyn croestoriadau o simnai a pentwr.
    • " -ffp-exception-behavior = {anwybyddu,maytrap, llym}" - yn caniatáu i chi ddewis y modd trin eithriadau ar gyfer rhifau pwynt arnawf.
    • "-ffp-model={cywir, llym, cyflym}" - Yn symleiddio mynediad i gyfres o opsiynau arbenigol ar gyfer rhifau pwynt arnawf.
    • "-fpch-codegen" a "-fpch-debuginfo" i gynhyrchu pennyn wedi'i lunio ymlaen llaw (PCH) gyda ffeiliau gwrthrych ar wahân ar gyfer cod a debuginfo.
    • “-fsanitize-coverage-allowlist” a “-fsanitize-coverage-blocklist” ar gyfer gwirio cwmpas sy'n profi rhestrau gwyn a du.
    • “-mtls-size={12,24,32,48}” i ddewis maint TLS (storfa edau-lleol).
    • "-menable-experimental-extension" i alluogi estyniadau RISC-V arbrofol.
  • Y modd rhagosodedig ar gyfer C yw "-fno-common", sy'n caniatáu mynediad mwy effeithlon i newidynnau byd-eang ar rai platfformau.
  • Mae'r storfa modiwl rhagosodedig wedi'i symud o /tmp i'r cyfeiriadur ~/.cache. I ddiystyru, gallwch ddefnyddio'r faner “-fmodules-cache-path =”.
  • Mae'r safon iaith C rhagosodedig wedi'i diweddaru o gnu11 i gnu17.
  • Ychwanegwyd cefnogaeth ragarweiniol ar gyfer estyniad GNU C "asm mewn llinell» ychwanegu mewnosodiadau cydosodwr. Mae'r estyniad yn dal i gael ei ddadansoddi, ond nid yw'n cael ei brosesu mewn unrhyw ffordd.
  • Mae'r galluoedd sy'n gysylltiedig â chymorth OpenCL a CUDA wedi'u hehangu. Ychwanegwyd cefnogaeth ar gyfer diagnosteg bloc OpenCL 2.0 a gweithredu nodweddion OpenMP 5.0 newydd.
  • Ychwanegwyd opsiwn IndentExternBlock i gyfleustodau fformat clang ar gyfer aliniad o fewn blociau allanol "C" ac allanol "C ++".
  • Mae'r dadansoddwr statig wedi gwella'r modd yr ymdrinnir ag adeiladwyr etifeddol yn C++. Ychwanegwyd sieciau newydd alpha.core.C11Lock ac alpha.fuchsia.Lock i wirio am gloeon, alpha.security.cert.pos.34c i ganfod defnydd anniogel o putenv, webkit.NoUncountedMemberChecker a webkit.RefCntblBaseVirtualDtor i ganfod problemau gyda mathau angyfrifol, alpha .cplusplus .SmartPtr i wirio am null cyfeirio pwyntydd clyfar.
  • Yn linter clang-taclus wedi adio cyfran fawr o sieciau newydd.
  • Mae'r gweinydd caching clangd (Clang Server) wedi gwella perfformiad ac wedi ychwanegu galluoedd diagnostig newydd.

Y prif arloesiadau LLVM 11.0:

  • Mae'r system adeiladu wedi'i newid i ddefnyddio Python 3. Os nad yw Python 3 ar gael, mae'n bosibl dychwelyd i ddefnyddio Python 2.
  • Mae'r pen blaen gyda'r casglwr ar gyfer yr iaith Go (llgo) wedi'i eithrio o'r datganiad, a all gael ei ailstrwythuro yn y dyfodol.
  • Mae'r priodoledd fector-swyddogaeth-abi-amrywiad wedi'i ychwanegu at y cynrychioliad canolradd (IR) i ddisgrifio'r mapio rhwng ffwythiannau sgalar a fector i fectoreiddio galwadau. O llvm::VectorType mae dau fath o fector ar wahân llvm::FixedVectorType a llvm::ScalableVectorType.
  • Mae canghennu yn seiliedig ar werthoedd udef a phasio gwerthoedd undef i swyddogaethau llyfrgell safonol yn cael ei gydnabod fel ymddygiad heb ei ddiffinio. YN
    memset/memcpy/memmove yn caniatáu pasio awgrymiadau undef, ond os yw'r paramedr â maint yn sero.

  • Mae LLJIT wedi ychwanegu cefnogaeth ar gyfer perfformio cychwyniadau statig trwy'r LLJIT::cychwyn a LLJIT::deinitialize methods. Mae'r gallu i ychwanegu llyfrgelloedd sefydlog at JITDylib gan ddefnyddio'r dosbarth StaticLibraryDefinitionGenerator wedi'i weithredu. Ychwanegwyd C API ar gyfer ORCv2 (API ar gyfer adeiladu casglwyr JIT).
  • Mae cefnogaeth ar gyfer proseswyr Cortex-A64, Cortex-A34, Cortex-A77 a Cortex-X78 wedi'i ychwanegu at gefnlen pensaernïaeth AArch1. Wedi gweithredu estyniadau ARMv8.2-BF16 (BFloat16) ac ARMv8.6-A, gan gynnwys RMv8.6-ECV (Rhithwiroli Gwell), ARMv8.6-FGT (Trapiau Graenog), ARMv8.6-AMU (Rhithwiroli Gweithgaredd Monitor) ac ARMv8.0-DGH (awgrym casglu data). Darperir y gallu i gynhyrchu cod ar gyfer swyddogaethau adeiledig sy'n rhwymo cyfarwyddiadau fector SVE.
  • Mae cefnogaeth ar gyfer proseswyr Cortex-M55, Cortex-A77, Cortex-A78 a Cortex-X1 wedi'i ychwanegu at gefnlen pensaernïaeth ARM. Estyniadau wedi'u gweithredu
    Armv8.6-A Matrics Lluosi a RMv8.2-AA32BF16 BFloat16.

  • Mae cefnogaeth ar gyfer cynhyrchu cod ar gyfer proseswyr POWER10 wedi'i ychwanegu at gefnlen pensaernïaeth PowerPC. Mae optimeiddio dolen wedi'i ehangu ac mae cymorth pwynt arnawf wedi'i wella.
  • Mae'r backend ar gyfer pensaernïaeth RISC-V yn caniatáu derbyn clytiau sy'n cefnogi setiau cyfarwyddiadau estynedig arbrofol nad ydynt wedi'u cymeradwyo'n swyddogol eto.
  • Mae'r backend ar gyfer y bensaernïaeth AVR wedi'i drosglwyddo o'r categori arbrofol i sefydlog, wedi'i gynnwys yn y dosbarthiad sylfaenol.
  • Mae'r backend ar gyfer pensaernïaeth x86 yn cefnogi cyfarwyddiadau Intel AMX a TSXLDTRK. Ychwanegwyd amddiffyniad rhag ymosodiadau LVI (Chwistrelliad Gwerth Llwyth), ac mae hefyd yn gweithredu mecanwaith Ataliad Ochr-Effaith Gweithredu Sbectol cyffredinol i rwystro ymosodiadau a achosir gan gyflawni gweithrediadau ar hap ar y CPU.
  • Yn y cefn ar gyfer pensaernïaeth SystemZ, mae cefnogaeth ar gyfer MemorySanitizer a LeakSanitizer wedi'i ychwanegu.
  • Cefnogaeth ychwanegol ar gyfer ffeil pennawd gyda chysonion mathemategol i Libc++ .
  • Ehangwyd Galluoedd cysylltydd LLD. Gwell cefnogaeth i fformat ELF, gan gynnwys yr opsiynau ychwanegol "--lto-emit-asm", "--lto-whole-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-unique", "-rosegment", "-threads=N". Ychwanegwyd opsiwn "--time-trace" i arbed yr olrhain i ffeil, y gellir ei ddadansoddi wedyn trwy'r rhyngwyneb olrhain chrome://yn Chrome.

Ffynhonnell: opennet.ru

Ychwanegu sylw