Dimittis de LLVM 10.0 compilator suite

Post sex menses evolutionis presented project emissio LLVM 10.0 - GCC instrumenta compatibles (compilatores, optimizers et codicem generantium), componendo programmata in bitcode intermedia de RISC-similis instructionum virtualium (machina virtualis low-gradu cum multi-gradu optimizationis systematis). Pseudocode generatum converti potest utens compilator JIT in instructiones machinae directe tempore programma executionis.

Novae notae in LLVM 10.0 subsidium pro C++ Conceptus includunt, Clang processum separatum non amplius decurrunt, subsidium pro CFG (cadore fluunt custodiae) pro Fenestra compescit, et novas CPU facultates sustentat.

Aliquam in Clang 10.0:

  • Addidit subsidium "conceptus", a C++ template extensionis quae in altera vexillum, codenamed C++2a (conversa in vexillum -std=c++2a).
    Conceptus permitto te definire a paro of template parametri requisita, quae, tempore compilare, argumentorum statuto circumscribere quae parametris templates accipi possunt. Conceptus adhiberi possunt ad vitandas repugnantias logicas inter proprietates notitiarum generum, quibus usus est in Formula et notitiis specierum proprietatum parametri initus.

    template
    conceptus aequalityComparable = requirit (T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • Defalta launch processus separati ("clang -cc1") in quo compilatio conficitur. Compilatio nunc fit in processu principali et optio "-fno-integrata-cc1" ad mores antiquos restituendos adhiberi potest.
  • Novi diagnostica modi:
    • "Wc99-designator" et "Wreorder-init-album" moneo contra utendi C99 initiali in C ++ modum in casibus ubi recte in C99 sed non in C ++.
    • "Wsizeof-array-div" - condiciones comprehendit ut "int arr[10]; ... sizeof(arr) / sizeof(brevem)…” (sizeof(arr) / sizeof(int)”).
    • "-Wxor-used-as-po" - monet contra usum construendi ut usus "^" (xor) operantis in operationibus quae cum exponentiatione confundi possunt (2^16).
    • "-Wfinal-dtor-non-final-class" - monet de classibus quae non notantur "ultima" speciei, sed destructor cum attributo "ultimo" habent.
    • "-Wtautologico-bitwise-compare" coetus est admonitionum ad diagnoscas comparationes tautologicas inter operationem sensibilem et constantem, et ad semper veras comparandas identificandas, in quibus bitsapiens VEL operatio applicatur numero non-negativo.
    • "Sed-conditional-parentheses" monet problemata cum operariis logicalibus ET (&) et OR (|) cum operator conditionali miscens (?:).
    • "-Wmisleading-indentation" analogum repressionis eiusdem nominis a GCC, quae monet de expressionibus incisis quasi parti si/alius/pro/ad scandali sint, re vera in hoc stipite non comprehenduntur. .
    • Cum denotando "-Wextra", per "-Wdeprecated-exemplum" perscriptio datur, monitum de usu conditorum
      "movere" et "exemplum" in classes cum definitio explicata destructor.

    • The "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" impedimenta dilatata sunt.
    • Quod "ob-parenthesium" et "Wlogical-op-parenthesium" compescit, per defaltam debilitata sunt.
  • In C et C++ codice, regulae arithmeticae operationes tantum in vestitu permissae sunt. Modus indefinitus Sanitizer in "-fsanitize=monstratorem-superfluam" nunc casus capit ut non-nullam addendo ad nullum monstratorem vel nullum monstratorem creando, cum integrum a non-nullo monstratorem subtrahendo.
  • Modus "-fsanitize=implicit-conversio" (Implicit Conversio Sanitizer) aptatur ad cognoscendas difficultates cum incremento et decremento operationum pro speciebus cum aliquantula magnitudine minoris quam "int" generis.
  • Cum eligendo x86 scopum architecturae "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" et "-march=cooperlake" per defaltam vectorizavit. codice uti 512-bit zmm registra desiit, excepta directa indicatione in fonte codice. Ratio est, quia frequentia CPU decrescit cum operationes 512-bitrae peragendae, quae negative afficiunt ad altiorem effectum. Ad novos mores mutandos, optio "-mprefer-vector-width=512" provisa est.
  • Vexillum mores "-vector-conversionum" GCC simile est: vector implicitus paulum conversiones inter vectores integros et fluitantis vectores prohibentur. Ad hanc limitationem tollendam, proponitur ut vexillum
    "-flax-vector-conversiones=omnium" quod est defalta.

  • Improved support for MIPS CPUs of the Octeon family. Adiecit "octeon+" ad indicem validorum CPU generum.
  • Cum in WebAssembly medium codicem congregans, wasm-opt optimizer automatice vocatur, si in systemate praesto est.
  • Ad systemata architecturae in RISC-V fundata, usus tabularum reponendarum valorum punctum fluctuantium permissus est in stipitibus conditionalibus coadunatis inline insertis.
  • Nova vexilla compilator addidit: "-fgnuc-versio" ad valorem versionis pro "__GNUC__" et similia macros pone; "-fmacro-praepositionem-map=OLD=NEAM" reponere indicem praepositionis VETERIS cum NOVIS in macros ut "__FILE__"; "-fpatchable-munus-intro=N[,M]" aliquem numerum NOP mandatorum ante et post functionis punctum ingressum generare. Nam RISC-V
    subsidia addita pro vexillis "-XX", "-mcmodel=medany" et "-mcmodel=medlow".

  • Addidit subsidium pro '__attribuere'((scopum("ramus-praesidium=...."))) attributum, cuius effectus optioni similis est. -mbranch-praesidium.
  • In Fenestra suggestu, cum vexillum "-cfguard" denotans, substitutio executionis manat integritas coercens (Control Flow Guard) ad munus indirectum vocatus impletur. Ad substitutionem perscriptio inactivandi, "-cfguard-nochecks" seu vexillum "__declspec(custodiam(nocf))) uti potes.
  • Mores attributi gnu_inlinei GCC similes sunt in casibus ubi sine keyword "externe" adhibetur.
  • Facultates cum OpenCL et CUDA subsidio auctae sunt. Addidit subsidium novis OpenMP 5.0 notis.
  • Optio Vulgatae utilitatis clangoris forma addita est, quae tibi permittit ut versionem C++ vexillum adhibeas cum codice parsing et formatura (Latest, Auto, c++03, c++11, c++14; c++17, c++ 20 .
  • Novae repressiones analyser statice additae sunt: ​​alpha.cplusplus.PlacementNew ut definias an spatium repono satis sit, fuchsia.HandleChecker ad detegendam pinum pertinentium ad Fuchsiam tracto, security.insecureAPI.decodeValueOfObjCType ad deprehendendum potentiale quiddam redundat cum usura [NSCoder decodeValueOfObjCType : at:] .
  • Mores indefiniti Sanitizer (UBSan) dilatavit monstratorem suum superfluum coercet ut applicationes non-nullarum exsertionum ad indicia nullas capiendas vel ad additionem indicis nullae pressionis consequentis.
  • In linter clang-digma additae magna portio coercet.

Main innovations LLVM 10.0;

  • Ad compage Attributor Novae optimizationes et analysres interprocedurales additae sunt. Status 19 attributorum diversorum praedicatur, inter 12 attributa 12 LLVM IR et 7 attributa abstracta ut viva.
  • Novas matrix mathematica munera in compilator aedificata addidit (Intrinsics) , quae reponuntur per compilationem instructionum efficientium vectoris.
  • Multae emendationes in tergum factae sunt pro X86, AArch64, ARM, SystemZ, MIPS, AMDGPU et PowerPC architecturae. Addidit CPU firmamentum
    Cortex-A65, Cortex-A65AE, Neoverse E1 et Neoverse N1. Pro ARMv8.1-M, ​​signum generationis processus optimized est (exempli gratia subsidium loramenta cum supra caput minimal apparuit) et subsidium autovectorizationis utente extensione MVE addita est. Improved CPU MIPS Octeon support. Nam PowerPC, vectorizationis mathematicorum subroutinarum utens in MASSV (Acceleratio SubSystem Mathematica) bibliotheca datur, codice generatio emendatur, et memoria accessus ab ansulis optimized est. Pro x86, tractatio vectoris typi v2i32, v4i16, v2i16, v8i8, v4i8 et v2i8 mutatus est.

  • Improved code generator for WebAssembly. Auxilia addita pro TLS (Repono Thread-Local) et instructiones atomic.fence. SIMD firmamentum signanter dilatatum est. WebAssembly obiecti imagini nunc facultatem habent utendi functionis multiformis subscriptionibus.
  • Analyser dispensando adhibetur in ora sagi MemorySSAquae sino vos ut inter varias memoriae operationes clientelas definias. MemorySSA compilationem et exsecutionem tempus minuere potest vel pro AliasSetTracker sine detrimento effectus adhiberi.
  • LLDB debugger insigniter emendavit subsidium pro forma v5 DWARF. Improved support for building with MinGW
    et facultatem initialem ad debug Windows executables pro ARM et ARM64 architecturae addidit. Descriptiones optionum oblatarum cum autocompletione input tab premendo additae sunt.

  • Expanded LLD linker excedunt. Auxilia emendata pro forma ELF, incluso plenam compatibilitatem globorum templates cum GNU ligante praestans, subsidium additis sectionibus debug compressis ".zdebug", addens proprietatem PT_GNU_PROPERTY ad sectionem .notu.gnu.property definiendam (in posterum adhiberi potest. nuclei Linux);
    Modi "-z-noseparati-code", "-z separati-code" et "-z segmenta separata onerosa" modi effecti sunt. Improved support for MinGW and WebAssembly.

Source: opennet.ru