Famoahana ny suite compiler LLVM 10.0

Taorian'ny enim-bolana ny fampandrosoana aseho famoahana tetikasa LLVM 10.0 - Fitaovana mifanentana amin'ny GCC (mpamorona, optimizer ary mpamorona kaody), manangona programa ho amin'ny kaody mpanelanelana amin'ny toromarika virtoaly sahala amin'ny RISC (milina virtoaly ambany miaraka amin'ny rafitra fanamafisam-peo marobe). Ny pseudocode vokarina dia azo ovaina amin'ny alalan'ny compiler JIT ho toromarika milina mivantana amin'ny fotoana famonoana ny programa.

Ny endri-javatra vaovao ao amin'ny LLVM 10.0 dia ahitana ny fanohanana ny C ++ Concepts, tsy mandeha intsony ny Clang ho toy ny dingana misaraka, ny fanohanana ny CFG (control flow guard) fanamarinana ho an'ny Windows, ary ny fanohanana ny fahaizan'ny CPU vaovao.

fanatsarana ao amin'ny Clang 10.0:

  • Fanampiana fanampiny ho an'ny "hevitra", fanitarana maodely C++ izay hampidirina ao amin'ny fenitra manaraka, antsoina hoe C++ 2a (navoakan'ny saina -std=c++2a).
    Ny foto-kevitra dia mamela anao hamaritra andiana fepetra takian'ny mari-pamantarana izay, amin'ny fotoana fanangonam-potoana, mametra ny andiana hevitra azo ekena ho mari-pamantarana mΓ΄dely. Ireo hevitra dia azo ampiasaina mba hialana amin'ny tsy fitovian'ny lojika eo amin'ny fananan'ireo karazana angona ampiasaina ao anatin'ny mΓ΄dely sy ny toetran'ny karazana angona amin'ny masontsivana fampidirana.

    template
    concept EqualityComparable = mitaky(T a, T b) {
    {a == b } -> std::boolean;
    {a != b } -> std::boolean;
    };

  • Amin'ny alΓ lan'ny default, ny fandefasana dingana misaraka ("clang -cc1") izay anaovana ny fanangonana dia atsahatra. Ny fanangonana dia vita amin'ny dingana lehibe izao, ary ny safidy "-fno-integrated-cc1" dia azo ampiasaina hamerenana ny fihetsika taloha.
  • Fomba diagnostika vaovao:
    • Ny "-Wc99-designator" sy ny "-Wreorder-init-list" dia mampitandrina amin'ny fampiasana ny fanombohana C99 amin'ny fomba C ++ raha toa ka marina izy ireo amin'ny C99 fa tsy ao amin'ny C ++ 20.
    • "-Wsizeof-array-div" - misambotra toe-javatra toy ny "int arr[10]; …sizeof(arr) / sizeof(short)…” (tokony ho β€œsizeof(arr) / sizeof(int)”).
    • "-Wxor-used-as-po" - mampitandrina amin'ny fampiasana constructs toy ny fampiasana ny "^" (xor) operator amin'ny asa izay mety afangaro amin'ny exponentiation (2^16).
    • "-Wfinal-dtor-non-final-class" - mampitandrina momba ny kilasy tsy voamarika amin'ny famaritana "farany", fa misy mpandrava miaraka amin'ny toetra "farany".
    • "-Wtautological-bitwise-compare" dia vondrona fampitandremana mba hamantarana ny fampitahana tautological eo amin'ny fandidiana bitwise sy ny tsy miova, ary ny famantarana ny fampitahana marina foana izay ampiharana ny fandidiana OR bitwise amin'ny isa tsy miiba.
    • "-Wbitwise-conditional-parentheses" dia mampitandrina ny olana rehefa mampifangaro ny operator lojika AND (&) sy OR (|) amin'ny operator conditional (?:).
    • "-Wmisleading-indentation" dia analogue amin'ny fanamarinana mitovy anarana avy amin'ny GCC, izay mampitandrina momba ny fitenenana indented toy ny hoe ao anatin'ny sakana if/else/for/while, fa raha ny marina dia tsy tafiditra ao anatin'ity sakana ity. .
    • Rehefa mamaritra ny "-Wextra", dia alefa ny fanamarinana "-Wdeprecated-copy", fampitandremana momba ny fampiasana mpanamboatra.
      "mifindra" sy "mandika" ao amin'ny kilasy misy famaritana mazava ny mpandrava.

    • Ny fisavana "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis" dia nitarina.
    • Ny fanamarinana "-Wbitwise-op-parentheses" sy "-Wlogical-op-parentheses" dia tsy mandeha amin'ny alΓ lan'ny default.
  • Ao amin'ny kaody C sy C ++, ny hetsika arithmetika pointer dia azo atao amin'ny arrays ihany. Ny Sanitizer amin'ny fitondran-tena tsy voafaritra amin'ny fomba "-fsanitize=pointer-overflow" izao dia misambotra tranga toy ny fampidirana offset tsy aotra amin'ny pointer null na mamorona tondro tsy misy dikany rehefa manaisotra integer amin'ny tondro tsy null.
  • Ny fomba "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) dia namboarina mba hamantarana ireo olana amin'ny asa fampiakarana sy fihenam-bidy ho an'ny karazana manana habe kely kokoa noho ny an'ny karazana "int".
  • Rehefa misafidy ny maritrano kendrena x86 "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" ary "-march=cooperlake" amin'ny alΓ lan'ny vectorized Ny kaody dia nijanona tamin'ny fampiasana rejisitra zmm 512-bit, afa-tsy ny fanondro mivantana azy ireo ao amin'ny kaody loharano. Ny antony dia mihena ny fatran'ny CPU rehefa manao asa 512-bit, izay mety hisy fiantraikany ratsy amin'ny zava-bita amin'ny ankapobeny. Raha hanova ny fihetsika vaovao dia omena ny safidy "-mprefer-vector-width=512".
  • Ny fihetsiky ny saina "-flax-vector-conversions" dia mitovitovy amin'ny GCC: voarara ny fiovam-po kely vetaveta implicit eo anelanelan'ny vΓ©ctors integer sy mitsingevana. Mba hanafoanana io fetra io, dia soso-kevitra ny hampiasa ny saina
    "-flax-vector-conversions=all" izay ny default.

  • Fanohanana nohatsaraina ho an'ny CPU MIPS an'ny fianakaviana Octeon. Nampiana "octeon+" amin'ny lisitry ny karazana CPU manankery.
  • Rehefa mivory ao amin'ny kaody intermediate WebAssembly, dia antsoina ho azy ny wasm-opt optimizer, raha misy ao amin'ny rafitra.
  • Ho an'ny rafitra mifototra amin'ny maritrano RISC-V, ny fampiasana rejisitra mitahiry ny soatoavina mitsingevana dia avela amin'ny blocs misy fepetra amin'ny fampidirana inline assembler.
  • Nampiana saina mpanangona vaovao: "-fgnuc-version" mba hametrahana ny sandan'ny kinova ho an'ny "__GNUC__" sy ny macro mitovy aminy; "-fmacro-prefix-map=OLD=NEW" hanoloana ny tovan'ny lahatahiry OLD amin'ny VAOVAO amin'ny macro toy ny "__FILE__"; "-fpatchable-function-entry=N[,M]" hamokatra toromarika NOP maromaro mialoha sy aorian'ny teboka fidirana. Ho an'ny RISC-V
    nanampy fanohanana ny saina "-ffixed-xX", "-mcmodel=medany" ary "-mcmodel=medlow".

  • Fanampiana fanampiny ho an'ny toetra '__attribute__((target("sampana-fiarovana =..."))), ny vokatr'izany dia mitovy amin'ny safidy -mbranch-fiarovana.
  • Ao amin'ny sehatra Windows, rehefa mamaritra ny saina "-cfguard", dia apetraka ny fanoloana ny fanaraha-maso ny fahamarinan'ny fizotran'ny fanatanterahana (Control Flow Guard) ho an'ny antso ankolaka. Mba hanesorana ny fanoloana fanamarinana dia azonao atao ny mampiasa ny saina "-cfguard-nochecks" na ny "__declspec(guard(nocf))" modifier.
  • Ny fihetsiky ny toetra gnu_inline dia mitovy amin'ny GCC raha toa ka tsy misy ny teny fanalahidy "extern".
  • Nitarina ny fahaiza-manao mifandraika amin'ny fanohanan'ny OpenCL sy CUDA. Fanampiana fanampiny ho an'ny endri-javatra OpenMP 5.0 vaovao.
  • Ny safidy Standard dia nampiana ny clang-format utility, izay ahafahanao mamaritra ny dikan-teny C ++ ampiasaina amin'ny fanaparitahana sy fandrafetana kaody (Latest, Auto, c ++ 03, c ++ 11, c ++ 14, c++17, c++20).
  • Nisy fisavana vaovao nampiana tao amin'ny analyzer static: alpha.cplusplus.PlacementNew mba hamaritana raha ampy ny toerana fitehirizana, fuchsia.HandleChecker hamantarana ireo fitetehana mifandraika amin'ny mpikirakira Fuchsia, security.insecureAPI.decodeValueOfObjCType hamantarana ny mety hisian'ny buffer tafahoatra rehefa mampiasa [NSCoder decodeValueypeOfOf :amin:] .
  • Ny Undefined Behavior Sanitizer (UBSan) dia nanitatra ny fisavana ny fihoaran'ny pointer mba hisambotra ny fampiharana ny offsets tsy aotra amin'ny pointer NULL na ny fanampiana vokatry ny offset pointer NULL.
  • Ao amin'ny linter clang-fidy nanampy ampahany betsaka amin'ny seky vaovao.

tena fanavaozana LLVM 10.0:

  • Ho an'ny rafitra Attributor Nampiana optimizations interprocedural vaovao sy mpandinika. Ny toetran'ny toetra 19 samy hafa dia vinavinaina, ao anatin'izany ny toetra 12 12 LLVM IR ary toetra 7 mibaribary toy ny fahavelomana.
  • Nampiana asa matematika matrix vaovao natsangana tao amin'ny compiler (Intrinsics), izay nosoloina torolalana vector mahomby mandritra ny fanangonana.
  • Betsaka ny fanatsarana natao ho an'ny backends ho an'ny X86, AArch64, ARM, SystemZ, MIPS, AMDGPU ary PowerPC. Fanampiana CPU fanampiny
    Cortex-A65, Cortex-A65AE, Neoverse E1 ary Neoverse N1. Ho an'ny ARMv8.1-M, ​​ny fizotry ny famoronana kaody dia nohatsaraina (ohatra, nipoitra ny fanohanana ny tadivavarana misy ambony ambany) ary ny fanohanana ny autovectorization dia nampiana tamin'ny fampiasana ny fanitarana MVE. Fanohanana CPU MIPS Octeon nohatsaraina. Ho an'ny PowerPC, ny vectorization ny subroutine matematika amin'ny alΓ lan'ny tranomboky MASSV (Mathematical Acceleration SubSystem) dia alefa, hatsaraina ny famoronana kaody, ary ny fidirana amin'ny fitadidiana avy amin'ny tadivavarana dia amboarina. Ho an'ny x86, niova ny fikarakarana karazana vector v2i32, v4i16, v2i16, v8i8, v4i8 ary v2i8.

  • Mpamorona kaody nohatsaraina ho an'ny WebAssembly. Fanohanana fanampiny ho an'ny TLS (Thread-Local Storage) sy torolalana atomic.fence. Nitarina be ny fanohanana SIMD. Ny rakitra object WebAssembly dia manana fahafahana mampiasa sonia fiasa marobe.
  • Ny analyzer dia ampiasaina rehefa manamboatra tadivavarana MemorySSA, izay ahafahanao mamaritra ny fiankinan-doha eo amin'ny asa fitadidiana samihafa. Ny MemorySSA dia afaka mampihena ny fotoana fanangonana sy famonoana na azo ampiasaina ho solon'ny AliasSetTracker tsy misy fahaverezan'ny fampisehoana.
  • Ny debugger LLDB dia nanatsara ny fanohanana ny endrika DWARF v5. Fanohanana nohatsaraina amin'ny fananganana miaraka amin'ny MinGW
    ary nanampy fahaiza-manao voalohany amin'ny debug Windows executables ho an'ny maritrano ARM sy ARM64. Fanazavana fanampiny momba ireo safidy atolotra rehefa mameno ny automatique amin'ny alΓ lan'ny fanindriana tabilao.

  • nitarina Ireo singa mifandraika amin'ny LLD. Fanohanana nohatsaraina ho an'ny endrika ELF, ao anatin'izany ny fiantohana tanteraka ny fampifanarahana ny maodely glob miaraka amin'ny rohy GNU, manampy ny fanohanana ny fizarana debug voatsindry ".zdebug", manampy ny fananana PT_GNU_PROPERTY hamaritana ny fizarana .note.gnu.property (azo ampiasaina amin'ny ho avy. Linux kernels),
    Ny "-z noseparate-code", "-z separate-code" ary "-z separate-loadable-segments" dia nampiharina. Fanohanana nohatsaraina ho an'ny MinGW sy WebAssembly.

Source: opennet.ru

Add a comment