Ho lokolloa ha LLVM 10.0 compiler suite

Ka mor'a likhoeli tse tšeletseng tsa tsoelo-pele hlahisoa tokollo ea morero LLVM 10.0 - Lisebelisoa tse lumellanang le GCC (li-compilers, optimizers le lijenereithara tsa khoutu), ho bokella mananeo ka har'a bitcode ea bohareng ea RISC-joaloka litaelo tsa sebele (mochine oa boemo bo tlaase o nang le tsamaiso ea mekhoa e mengata ea ho ntlafatsa). Pseudocode e hlahisitsoeng e ka fetoloa ho sebelisoa JIT compiler hore e be litaelo tsa mochine ka ho toba nakong ea ts'ebetso ea lenaneo.

Likarolo tse ncha ho LLVM 10.0 li kenyelletsa tšehetso bakeng sa Likhopolo tsa C ++, ha e sa sebetsa Clang e le ts'ebetso e arohaneng, tšehetso bakeng sa licheke tsa CFG (taolo ea phallo ea phallo) bakeng sa Windows, le ts'ehetso ea bokhoni bo bocha ba CPU.

Lintlafatso ho Clang 10.0:

  • Tšehetso e ekelitsoeng bakeng sa "likhopolo", keketso ea template ea C++ e tla kenyelletsoa maemong a latelang, a codenamed C++2a (e buletsoe ke -std=c++2a folakha).
    Likhopolo li u lumella ho hlalosa sete ea litlhoko tsa paramethara ea template eo, ka nako ea ho bokella, e fokotsang sete ea likhang tse ka amoheloang e le litekanyetso tsa template. Likhopolo li ka sebelisoa ho qoba ho se lumellane ho utloahalang pakeng tsa thepa ea mefuta ea data e sebelisoang ka har'a template le thepa ea mofuta oa data ea litekanyetso tsa ho kenya.

    template
    khopolo EqualityComparable = e hloka(T a, T b) {
    { a == b } -> std::boolean;
    {a != b } -> std::boolean;
    };

  • Ka mokhoa o ikhethileng, ho qalisoa ha ts'ebetso e arohaneng ("clang -cc1") eo ho bokelloang ho etsoang ho emisoa. Ho bokella hona joale ho etsoa ka mokhoa o ka sehloohong, 'me khetho ea "-fno-integrated-cc1" e ka sebelisoa ho tsosolosa boitšoaro ba khale.
  • Mekhoa e mecha ea tlhahlobo:
    • "-Wc99-designator" le "-Wreorder-init-list" li lemosa khahlanong le ho sebelisa li-initiizers tsa C99 ka mokhoa oa C++ maemong ao li nepahetseng ho C99 empa eseng ho C++20.
    • "-Wsizeof-array-div" - e tšoara maemo a kang "int arr[10]; …sizeof(arr) / sizeof(short)…” (e lokela ho ba “sizeof(arr) / sizeof(int)”).
    • "-Wxor-used-as-po" - e lemosa kgahlanong le tshebediso ya meaho e kang tshebediso ya "^" (xor) opareitara tshebetsong e ka ferekanngwang le exponentiation (2^16).
    • "-Wfinal-dtor-non-final-class" - e hlokomelisa ka lihlopha tse sa tšoauoang ka "final" tse hlalosang, empa li na le motimetsi ea nang le tšobotsi ea "ho qetela".
    • "-Wtautological-bitwise-compare" ke sehlopha sa litemoso bakeng sa ho hlahloba papiso ea tautological pakeng tsa ts'ebetso e nyenyane le e sa khaotseng, le bakeng sa ho khetholla papiso ea kamehla-'nete eo ho eona ts'ebetso ea bitwise OR e sebelisoang ho nomoro e seng mpe.
    • "-Wbitwise-conditional-parentheses" e hlokomelisa ka mathata ha ho tsoakoa li-opereishene tse utloahalang LE (&) le OR (|) le opareitara e nang le maemo (?:).
    • "-Wmisleading-indentation" ke analogue ea cheke ea lebitso le ts'oanang ho tsoa ho GCC, e lemosang ka mantsoe a indented joalo ka ha eka ke karolo ea haeba / e 'ngoe / bakeng sa / ha block, empa ha e le hantle ha e kenyelelitsoe bolokong bona. .
    • Ha o hlakisa "-Wextra", cheke ea "-Wdeprecated-copy" e ea lumelloa, e lemosa mabapi le ts'ebeliso ea lihahi.
      "Sutha" le "kopi" ka litlelase tse nang le tlhaloso e hlakileng ea mohatelli.

    • "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" licheke li atolositsoe.
    • Licheke tsa "-Wbitwise-op-parentheses" le "-Wlogical-op-parentheses" li tingoa ka ho sa feleng.
  • Ka khoutu ea C le C ++, ts'ebetso ea lipalo ea pointer e lumelloa feela ka lihlopha. The Undefined Behavior Sanitizer ka "-fsanitize=pointer-overflow" mokhoa joale e tšoara maemo a kang ho eketsa offset e seng zero ho pointer e se nang letho kapa ho theha pointer e se nang thuso ha o ntša nomoro e felletseng ho sesupa se sa sebetseng.
  • Mokhoa oa "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) o lokiselitsoe ho khetholla mathata a ts'ebetso ea ho eketsa le ho fokotsa mefuta e nang le boholo bo nyane ho feta ba mofuta oa "int".
  • Ha u khetha meralo e shebiloeng ea x86 "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" le "-march=cooperlake" ka ho sa feleng ho vectorized khoutu e emisitse ho sebelisa li-register tsa 512-bit zmm, ntle le pontšo ea tsona e tobileng ho khoutu ea mohloli. Lebaka ke hore maqhubu a CPU a fokotseha ha o etsa ts'ebetso ea 512-bit, e ka amang ts'ebetso ka kakaretso hampe. Ho fetola boitšoaro bo bocha, ho fanoe ka khetho "-mprefer-vector-width=512".
  • Boitšoaro ba folakha ea "-flax-vector-conversions" bo tšoana le GCC: li-conversion tse sa bonahaleng tsa vector lipakeng tsa palo e felletseng le li-vector-point-point ha lia lumelloa. Ho felisa moeli ona, ho etsoa tlhahiso ea ho sebelisa folakha
    "-flax-vector-conversions=tsohle" e leng ea kamehla.

  • Tšehetso e ntlafalitsoeng bakeng sa MIPS CPUs ea lelapa la Octeon. E kentse "octeon+" lethathamong la mefuta e nepahetseng ea CPU.
  • Ha e bokana ka har'a khoutu ea mahareng ea WebAssembly, optimizer ea wasm-opt e bitsoa ka bo eona, haeba e fumaneha sistimi.
  • Bakeng sa lits'ebetso tse ipapisitseng le meralo ea RISC-V, ts'ebeliso ea lirekoto tse bolokang boleng ba lintlha tse phaphametseng li lumelloa ka li-blocks tsa li-assembler inline inline.
  • E kentse lifolakha tse ncha tsa mohlophisi: "-fgnuc-version" ho beha boleng ba mofuta oa "__GNUC__" le li-macros tse tšoanang; "-fmacro-prefix-map=OLD=NTSHA" ho nkela sebaka sa sehlongwapele sa bukana KGOLE ka se NTSHA ka macros tse kang "__FILE__"; "-fpatchable-function-entry=N[,M]" ho hlahisa palo e itseng ea litaelo tsa NOP pele le ka mor'a sebaka sa ho kena mosebetsing. Bakeng sa RISC-V
    e ekelitse tšehetso bakeng sa lifolakha tsa "-ffixed-xX", "-mcmodel=medany" le "-mcmodel=medlow".

  • Tšehetso e ekelitsoeng bakeng sa tšobotsi ea '__attribute__((target(“branch-protection=...")))), eo phello ea eona e ts'oanang le khetho. -tšireletseho ea lekala.
  • Sethaleng sa Windows, ha ho hlakisoa folakha ea "-cfguard", phetisetso ea licheke tsa botšepehi ba phallo ea ts'ebetso (Control Flow Guard) bakeng sa mehala e sa tobang ea ts'ebetso e kengoa ts'ebetsong. Ho thibela ho fetola cheke, o ka sebelisa folakha ea "-cfguard-nochecks" kapa "__declspec(lebeli(nocf))" modifier.
  • Boitšoaro ba tšobotsi ea gnu_inline bo tšoana le GCC maemong ao e sebelisoang ntle le lentsoe la sehlooho "extern".
  • Bokhoni bo amanang le tšehetso ea OpenCL le CUDA bo ekelitsoe. Ts'ehetso e ekelitsoeng bakeng sa likarolo tse ncha tsa OpenMP 5.0.
  • Khetho e tloaelehileng e kenyellelitsoe ho clang-format utility, e u lumellang hore u tsebe hore na mofuta oa C ++ o sebelisoa ha u bala le ho fomata khoutu (Latest, Auto, c++03, c++11, c++14, c++17, c++20 ).
  • Licheke tse ncha li kenyelelitsoe ho static analyzer: alpha.cplusplus.PlacementNew ho fumana hore na ho na le sebaka se lekaneng sa polokelo, fuchsia.HandleChecker ho lemoha ho lutla ho amanang le li-handers tsa Fuchsia, security.insecureAPI.decodeValueOfObjCType ho lemoha ho phalla ho ka bang teng ha buffer ha u sebelisa [NSCoderyOpedOcodebVa. :ho:].
  • The Undefined Behavior Sanitizer (UBSan) e atolositse licheke tsa eona tsa ho phalla ha pointer ho ts'oara ts'ebeliso ea li-non-zero offsets ho li-pointers tsa NULL kapa keketso e hlahisoang ea NULL pointer offset.
  • Ka linter clang-tidy eketsoe karolo e kholo ea licheke tse ncha.

ka sehloohong boiqapelo LLVM 10.0:

  • Ho ea moralo Attributor Lintlafatso tse ncha tsa li-interprocedural optimizations le li-analyzer li kentsoe. Boemo ba litšoaneleho tse fapaneng tse 19 bo boleloa esale pele, ho kenyeletsoa litšoaneleho tse 12 12 LLVM IR le tse 7 tse sa bonahaleng joalo ka bophelo.
  • E kentse mesebetsi e mecha ea lipalo ea matrix e hahiloeng ka har'a komporo (Litaba tsa ka hare), tse nkeloang sebaka ke litaelo tse sebetsang tsa vector nakong ea ho bokella.
  • Lintlafatso tse ngata li entsoe ho li-backends bakeng sa meralo ea X86, AArch64, ARM, SystemZ, MIPS, AMDGPU le PowerPC. Ts'ehetso ea CPU e ekelitsoeng
    Cortex-A65, Cortex-A65AE, Neoverse E1 le Neoverse N1. Bakeng sa ARMv8.1-M, ​​ts'ebetso ea tlhahiso ea khoutu e ntlafalitsoe (mohlala, tšehetso ea loops e nang le hlooho e nyane e hlahile) mme ts'ehetso ea autovectorization e kentsoe ho sebelisoa katoloso ea MVE. Ts'ehetso e ntlafalitsoeng ea CPU MIP Octeon. Bakeng sa PowerPC, vectorization ea subroutines ea lipalo e sebelisang laeborari ea MASSV (Mathematical Acceleration SubSystem) e ea lumelloa, tlhahiso ea khoutu ea ntlafatsoa, ​​'me phihlello ea memori e tsoang ho li-loops e ea ntlafatsoa. Bakeng sa x86, ho sebetsana le mefuta ea li-vector v2i32, v4i16, v2i16, v8i8, v4i8 le v2i8 e fetotsoe.

  • Jenereithara ea khoutu e ntlafalitsoeng bakeng sa WebAssembly. Tšehetso e ekelitsoeng bakeng sa TLS (Thread-Local Storage) le litaelo tsa atomic.fence. Tšehetso ea SIMD e ekelitsoe haholo. Lifaele tsa ntho ea WebAssembly joale li na le bokhoni ba ho sebelisa li-signature tsa boleng bo bongata.
  • Analyzer e sebelisoa ha ho etsoa loops MemoriSSA, e u lumellang ho hlalosa ho its'etleha lipakeng tsa lits'ebetso tse fapaneng tsa memori. MemorySSA e ka fokotsa nako ea ho bokella le ho e phethahatsa kapa ea sebelisoa sebakeng sa AliasSetTracker ntle le tahlehelo ea ts'ebetso.
  • LLDB debugger e ntlafalitse haholo ts'ehetso ea sebopeho sa DWARF v5. Tšehetso e ntlafetseng ea ho haha ​​le MinGW
    mme e ekelitse bokhoni ba pele ba ho lokisa lisebelisoa tsa Windows bakeng sa meralo ea ARM le ARM64. Litlhaloso tse kenyellelitsoeng tsa likhetho tse fanoang ha u tlatsa ho kenya ka ho tobetsa konopo.

  • E atolositsoe LLD bokhoni ba ho hokahanya. Tšehetso e ntlafetseng bakeng sa sebopeho sa ELF, ho kenyelletsa le ho lumellana ka botlalo ha li-template tsa glob le GNU linker, tšehetso e eketsehileng bakeng sa likarolo tse hatisitsoeng tsa bothata ".zdebug", e kentse thepa ea PT_GNU_PROPERTY ho hlalosa karolo ea .note.gnu.property (e ka sebelisoa Linux e tlang lithollo),
    Mekhoa ea "-z noseparate-code", "-z separate-code" le "-z separate-loadable-segments" e kentsoe tšebetsong. Tšehetso e ntlafetseng bakeng sa MinGW le WebAssembly.

Source: opennet.ru

Eketsa ka tlhaloso