Itusilẹ ti LLVM 10.0 alakojo suite

Lẹhin osu mẹfa ti idagbasoke gbekalẹ idasilẹ ise agbese LLVM 10.0 - Awọn irinṣẹ ibaramu GCC (awọn olupilẹṣẹ, awọn olupilẹṣẹ ati awọn olupilẹṣẹ koodu), iṣakojọpọ awọn eto sinu bitcode agbedemeji ti RISC-bii awọn ilana foju (ẹrọ foju ipele kekere pẹlu eto imudara ipele pupọ). Pseudocode ti ipilẹṣẹ le ṣe iyipada nipa lilo olupilẹṣẹ JIT sinu awọn ilana ẹrọ taara ni akoko ipaniyan eto.

Awọn ẹya tuntun ni LLVM 10.0 pẹlu atilẹyin fun Awọn imọran C ++, ko ṣiṣẹ Clang mọ bi ilana ti o yatọ, atilẹyin fun CFG (oluṣọ ṣiṣan iṣakoso) sọwedowo fun Windows, ati atilẹyin fun awọn agbara Sipiyu tuntun.

Awọn ilọsiwaju ni Clang 10.0:

  • Ṣe afikun atilẹyin fun "awọn imọran", Àdàkọ C++ kan ti yoo wa ninu ọpagun ti o tẹle, ti a fun ni orukọ C++2a (titan nipasẹ -std=c++2a flag).
    Awọn imọran gba ọ laaye lati ṣalaye eto awọn ibeere paramita awoṣe kan ti, ni akoko iṣakojọ, ṣe idinwo ṣeto awọn ariyanjiyan ti o le gba bi awọn aye awoṣe. Awọn imọran le ṣee lo lati yago fun awọn aiṣedeede ọgbọn laarin awọn ohun-ini ti awọn oriṣi data ti a lo laarin awoṣe ati awọn ohun-ini iru data ti awọn aye igbewọle.

    awoṣe
    Erongba EqualityComparable = nbeere (T a, T b) {
    {a == b} -> std :: boolean;
    {a != b } -> std :: boolean;
    };

  • Nipa aiyipada, ifilọlẹ ti ilana lọtọ (“clang -cc1”) ninu eyiti o ti ṣe akopọ ti duro. Akopọ ti wa ni bayi ṣe ni akọkọ ilana, ati awọn "-fno-integrated-cc1" aṣayan le ṣee lo lati mu pada iwa atijọ.
  • Awọn ọna iwadii tuntun:
    • "-Wc99-apẹrẹ" ati "-Wreorder-init-list" kilo lodi si lilo awọn ipilẹṣẹ C99 ni ipo C ++ ni awọn igba ti wọn jẹ deede ni C99 ṣugbọn kii ṣe ni C ++ 20.
    • "-Wsizeof-array-div" - mu awọn ipo bii "int arr[10]; …iwọn (arr) / iwọn (kukuru)…” (yẹ ki o jẹ “iwọn (arr) / iwọn (int)”).
    • "-Wxor-used-as-po" - kilo lodi si lilo awọn ohun-itumọ gẹgẹbi lilo oniṣẹ "^" (xor) ni awọn iṣẹ-ṣiṣe ti o le ni idamu pẹlu itumọ (2^16).
    • "-Wfinal-dtor-ti kii-ipari-kilasi" - kilo nipa awọn kilasi ti a ko ti samisi pẹlu "ipari" specifier, ṣugbọn ni apanirun pẹlu "ipari" abuda.
    • "-Wtautological-bitwise-compare" jẹ ẹgbẹ kan ti awọn ikilọ fun ṣiṣe ayẹwo awọn afiwera tautological laarin iṣẹ-ṣiṣe bitwise ati igbagbogbo, ati fun idamo awọn afiwera nigbagbogbo-otitọ ninu eyiti iṣẹ-bitwise OR ti lo si nọmba ti kii ṣe odi.
    • "-Wbitwise-conditional-parentheses" kilo fun awọn iṣoro nigbati o ba dapọ awọn oniṣẹ ọgbọn ATI (&) ati OR (|) pẹlu oniṣẹ ẹrọ (?:).
    • "-Wmisleading-indentation" jẹ afọwọṣe ti ayẹwo ti orukọ kanna lati GCC, eyiti o kilọ nipa awọn ọrọ indented bi ẹnipe wọn jẹ apakan ti ohun ti o ba jẹ / miiran / fun / lakoko Àkọsílẹ, ṣugbọn ni otitọ wọn ko wa ninu Àkọsílẹ yii. .
    • Nigbati o ba n ṣalaye “-Wextra”, ṣayẹwo “-Wdeprecated-daakọ” ti ṣiṣẹ, ikilọ nipa lilo awọn olupilẹṣẹ
      "gbe" ati "daakọ" ni awọn kilasi pẹlu itumọ apanirun ti o fojuhan.

    • Awọn sọwedowo "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" ti gbooro.
    • Awọn sọwedowo "-Wbitwise-op-parentheses" ati "-Wlogical-op-parentheses" jẹ alaabo nipasẹ aiyipada.
  • Ninu koodu C ati C++, awọn iṣẹ iṣiro ijuboluwole nikan ni a gba laaye ni awọn akojọpọ. Imumọ ihuwasi ti a ko ṣalaye ni ipo "-fsanitize=pointer-overflow" ni bayi mu awọn ọran bii fifi aiṣedeede ti kii ṣe odo kun itọka asan tabi ṣiṣẹda itọka asan nigbati o ba yọkuro odidi kan kuro ninu itọka asan.
  • Ipo "-fsanitize=iṣiro-itumọ" (Iyipada Iyipada Ipilẹṣẹ) jẹ atunṣe lati ṣe idanimọ awọn iṣoro pẹlu ilosoke ati awọn iṣẹ idinku fun awọn oriṣi pẹlu iwọn diẹ ti o kere ju iru “int” lọ.
  • Nigbati o ba yan x86 awọn faaji ibi-afẹde "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" ati "-march=cooperlake" nipa aiyipada ni vectorized The koodu ti duro ni lilo awọn iforukọsilẹ zmm 512-bit, ayafi fun itọkasi taara wọn ninu koodu orisun. Idi ni pe igbohunsafẹfẹ Sipiyu dinku nigbati o ba n ṣiṣẹ awọn iṣẹ 512-bit, eyiti o le ni ipa lori iṣẹ ṣiṣe ni odi. Lati yi ihuwasi titun pada, aṣayan "-mprefer-vector-width=512" ti pese.
  • Ihuwasi asia "-flax-vector-conversions" jọra si GCC: awọn iyipada bit fekito to ṣoki laarin odidi ati awọn olutọpa oju omi lilefoofo jẹ eewọ. Lati yọkuro aropin yii, a dabaa lati lo asia
    "-flax-vector-conversions=all" eyi ti o jẹ aiyipada.

  • Imudara atilẹyin fun MIPS CPUs ti idile Octeon. Ṣafikun “octeon +” si atokọ ti awọn iru Sipiyu ti o wulo.
  • Nigbati o ba n pejọ sinu koodu agbedemeji WebAssembly, iṣapeye wasm-opt jẹ ipe laifọwọyi, ti o ba wa ninu eto naa.
  • Fun awọn eto ti o da lori faaji RISC-V, lilo awọn iforukọsilẹ ti o tọju awọn iye aaye lilefoofo ni a gba laaye ni awọn bulọọki ipo ti awọn ifibọ inline apejọ.
  • Ṣafikun awọn asia alakojọ tuntun: "-fgnuc-version" lati ṣeto iye ikede fun "__GNUC__" ati awọn macros ti o jọra; "-fmacro-prefix-map=OLD=OTUN" lati ropo ìpele-iṣaaju-iṣaaju-iṣaaju OLD pẹlu TITUN ni macros gẹgẹbi "__FILE__"; "-fpatchable-function-entry=N[,M]" lati ṣe ipilẹṣẹ nọmba kan ti awọn ilana NOP ṣaaju ati lẹhin aaye titẹsi iṣẹ. Fun RISC-V
    atilẹyin afikun fun "-ffixed-xX", "-mcmodel=medany" ati "-mcmodel=medlow" awọn asia.

  • Atilẹyin ti a ṣafikun fun ‘__attribute__((afojusun(“ẹka-idaabobo=...))) abuda, ipa eyiti o jọra si aṣayan -branch-idaabobo.
  • Lori iru ẹrọ Windows, nigbati o ba n ṣalaye asia “-cfguard”, fidipo ti awọn sọwedowo iṣotitọ sisan ipaniyan (Iṣakoso ṣiṣan ṣiṣan) fun awọn ipe iṣẹ aiṣe-taara ni imuse. Lati mu iyipada ayẹwo, o le lo asia "-cfguard-nochecks" tabi "__declspec(oluso(nocf))" modifier.
  • Ihuwasi ti abuda gnu_inline jẹ iru si GCC ni awọn ọran nibiti o ti lo laisi koko “ita”.
  • Awọn agbara ti o ni nkan ṣe pẹlu OpenCL ati atilẹyin CUDA ti pọ si. Atilẹyin ti a ṣafikun fun awọn ẹya OpenMP 5.0 tuntun.
  • Aṣayan Standard kan ti ṣafikun si IwUlO ọna kika clang, eyiti o fun ọ laaye lati pinnu ẹya ti boṣewa C ++ ti a lo nigbati o ba ṣe itupalẹ ati koodu kika (Latest, Auto, c ++03, c ++11, c ++14, c++17, c++20).
  • Awọn sọwedowo tuntun ti ṣafikun si olutọpa aimi: alpha.cplusplus.PlacementNew lati pinnu boya aaye ibi-itọju to to, fuchsia.HandleChecker lati ṣe awari awọn n jo ti o ni ibatan si awọn olutọju Fuchsia, security.insecureAPI.decodeValueOfObjCType lati ṣe awari awọn ṣiṣan buffer ti o pọju nigba lilo [NSCoder deVjue :ni:] .
  • Sanitizer Ihuwasi Aisọ asọye (UBSan) ti faagun awọn sọwedowo aponsedanu itọka rẹ lati mu ohun elo ti awọn aiṣedeede ti kii ṣe odo si awọn itọka NULL tabi afikun abajade ti aiṣedeede itọka NULL kan.
  • Ni linter clang-tidy kun kan ti o tobi ìka ti titun sọwedowo.

akọkọ awọn imotuntun LLVM 10.0:

  • Si ilana Attributorer Awọn iṣapeye interprocedural tuntun ati awọn atunnkanka ti ni afikun. Ipo ti awọn abuda oriṣiriṣi 19 jẹ asọtẹlẹ, pẹlu awọn abuda 12 12 LLVM IR ati awọn abuda 7 abstrakt gẹgẹbi igbesi aye.
  • Ṣafikun awọn iṣẹ iṣiro matrix tuntun ti a ṣe sinu akopọ (Awọn ojulowo), eyiti o rọpo nipasẹ awọn itọnisọna fekito daradara lakoko iṣakojọpọ.
  • Awọn ilọsiwaju lọpọlọpọ ni a ti ṣe si awọn ẹhin fun X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ati awọn faaji ile PowerPC. Afikun atilẹyin Sipiyu
    Cortex-A65, Cortex-A65AE, Neoverse E1 ati Neoverse N1. Fun ARMv8.1-M, ​​ilana iran koodu ti jẹ iṣapeye (fun apẹẹrẹ, atilẹyin fun awọn losiwajulosehin pẹlu oke ti o kere ju ti han) ati atilẹyin fun adaṣe adaṣe ti ṣafikun ni lilo itẹsiwaju MVE. Dara si Sipiyu MIPS Octeon support. Fun PowerPC, vectorization ti mathematiki subroutines lilo MASSV (Mathematical Acceleration SubSystem) ìkàwé ti wa ni sise, koodu iran ti wa ni ilọsiwaju, ati iranti wiwọle lati yipo ti wa ni iṣapeye. Fun x86, mimu awọn oriṣi vector v2i32, v4i16, v2i16, v8i8, v4i8 ati v2i8 ti yipada.

  • Imudara koodu monomono fun WebAssembly. Atilẹyin ti a ṣafikun fun TLS (Ipamọ Opo-Agbegbe) ati awọn itọnisọna atomic.fence. Atilẹyin SIMD ti pọ si ni pataki. Awọn faili ohun WebAssembly ni bayi ni agbara lati lo awọn ibuwọlu iṣẹ ti o wulo pupọ.
  • A lo olutupalẹ nigbati o ba n ṣiṣẹ awọn iyipo MemorySSA, eyiti o fun ọ laaye lati ṣalaye awọn igbẹkẹle laarin awọn iṣẹ iranti oriṣiriṣi. MemorySSA le dinku akopo ati akoko ipaniyan tabi o le ṣee lo dipo AliasSetTracker laisi isonu ti iṣẹ.
  • LLDB n ṣatunṣe aṣiṣe ti ni ilọsiwaju atilẹyin pataki fun ọna kika DWARF v5. Atilẹyin ilọsiwaju fun kikọ pẹlu MinGW
    ati ṣafikun agbara ibẹrẹ lati ṣatunṣe awọn iṣẹ ṣiṣe Windows fun ARM ati ARM64 faaji. Awọn apejuwe ti a ṣafikun ti awọn aṣayan ti a funni nigbati titẹ sii adaṣe adaṣe ṣiṣẹ nipa titẹ taabu.

  • Ti fẹ LLD linker awọn agbara. Atilẹyin ilọsiwaju fun ọna kika ELF, pẹlu ibaramu kikun ti awọn awoṣe glob pẹlu ọna asopọ GNU, atilẹyin afikun fun awọn apakan yokokoro fisinuirindigbindigbin “.zdebug”, ṣafikun ohun-ini PT_GNU_PROPERTY lati ṣalaye apakan .note.gnu.property (le ṣee lo ni Linux iwaju iwaju. awọn ekuro),
    Awọn ipo “-z noseparate-code”, “-z lọtọ-koodu” ati “-z lọtọ-loadable-segments” ti ni imuse. Imudara atilẹyin fun MinGW ati WebAssembly.

orisun: opennet.ru

Fi ọrọìwòye kun