Sgaoileadh an t-sreath cruinneachaidh LLVM 9.0

Às deidh sia mìosan de leasachadh air a thaisbeanadh foillseachadh pròiseict LLVM 9.0 - Innealan a tha co-chosmhail ri GCC (luchd-cruinneachaidh, optimizers agus gineadairean còd), a’ cur ri chèile phrògraman ann an bitcode eadar-mheadhanach de stiùiridhean brìgheil coltach ri RISC (inneal brìgheil ìre ìosal le siostam optimization ioma-ìre). Faodar am pseudocode a chaidh a chruthachadh a thionndadh le bhith a’ cleachdadh inneal-cruinneachaidh JIT gu stiùireadh inneal gu dìreach aig àm coileanadh a’ phrògraim.

Tha feartan ùra LLVM 9.0 a’ toirt a-steach toirt air falbh an taga dealbhaidh deuchainneach bhon àrd-ùrlar targaid RISC-V, taic C ++ airson OpenCL, an comas prògram a roinn ann am pàirtean làn luchdaichte ann an LLD, agus buileachadh an “fhuair mi", air a chleachdadh ann an còd kernel Linux. chuir libc ++ taic ri WASI (Eadar-aghaidh Siostam WebAssembly), agus chuir LLD taic tùsail ris airson ceangal fiùghantach WebAssembly.

Leasachaidhean ann an Clang 9.0:

  • Air a chur ris buileachadh an abairt sònraichte GCC"fhuair mi“, a leigeas leat gluasad bho bhloc inline cruinneachaidh gu leubail ann an còd C. Tha feum air an fheart seo gus an kernel Linux a thogail sa mhodh “CONFIG_JUMP_LABEL=y” a’ cleachdadh Clang air siostaman le ailtireachd x86_64. A’ toirt aire do na h-atharrachaidhean a chaidh a chur ris ann am fiosan roimhe seo, faodar an kernel Linux a-nis a thogail ann an Clang airson an ailtireachd x86_64 (roimhe seo cha deach taic a thoirt ach do thogalach airson ailtireachd gàirdean, aarch64, ppc32, ppc64le agus mips). A bharrachd air an sin, tha pròiseactan Android agus ChromeOS air an atharrachadh mar-thà gus Clang a chleachdadh airson togail kernel, agus tha Google a’ dèanamh deuchainn air Clang mar am prìomh àrd-ùrlar airson kernels a thogail airson na siostaman Linux riochdachaidh aige. Anns an àm ri teachd, faodar co-phàirtean LLVM eile a chleachdadh anns a ’phròiseas togail kernel, a’ toirt a-steach LLD, llvm-objcopy, llvm-ar, llvm-nm, agus llvm-objdump;
  • Taic deuchainneach a bharrachd airson a bhith a’ cleachdadh C ++17 ann an OpenCL. Tha feartan sònraichte a’ toirt a-steach taic airson buadhan àite seòlaidh, bacadh air tionndadh àite seòlaidh le gnìomhaichean tilgeadh seòrsa, solarachadh seòrsaichean vectar mar ann an OpenCL airson C, làthaireachd seòrsaichean sònraichte OpenCL airson ìomhaighean, tachartasan, seanalan, msaa.
  • Chaidh brataichean cruinneachaidh ùra a chuir ris “-ftime-trace” agus “-ftime-trace-granularity = N” gus aithisg a ghineadh air àm cur gu bàs diofar ìrean den aghaidh (parsadh, tòiseachadh) agus backend (ìrean optimization). Tha an aithisg air a sàbhaladh ann an cruth json, co-chòrdail ri chrome://tracing and speedscope.app;
  • Chuir sinn ris a’ ghiullachd den t-sònrachadh “__declspec(allocator)” agus gineadh fiosrachadh deasbaid na chois a leigeas leat sùil a chumail air caitheamh cuimhne ann an àrainneachd Visual Studio;
  • Airson cànan C, chaidh taic a chuir ris airson a’ mhacro “__FILE_NAME__”, a tha coltach ris a’ mhacro “__FILE__”, ach a’ toirt a-steach dìreach ainm an fhaidhle às aonais an t-slighe slàn;
  • Tha C ++ air taic a leudachadh airson feartan àite seòlaidh gus còmhdach a dhèanamh air grunn fheartan C ++, a’ toirt a-steach paramadair agus pàtrain argamaid, seòrsachan iomraidh, co-dhùnadh seòrsa tilleadh, nithean, gnìomhan fèin-ghinte, gnìomhaichean togte, agus barrachd.
  • Chaidh na comasan co-cheangailte ri taic airson OpenCL, OpenMP agus CUDA a leudachadh. Tha seo a’ toirt a-steach taic tùsail airson a bhith a’ toirt a-steach gnìomhan OpenCL a tha air an togail a-steach (chaidh am bratach “-fdeclare-opencl-builtins” a chur ris), chaidh an leudachadh cl_arm_integer_dot_product a chuir an gnìomh, agus chaidh innealan sgrùdaidh a leudachadh;
  • Chaidh obair an anailisiche statach a leasachadh agus chaidh sgrìobhainnean mu choileanadh mion-sgrùdadh statach a chuir ris. Chaidh brataichean a chur ris gus na modalan dearbhaidh a tha rim faighinn agus na roghainnean le taic a thaisbeanadh (“-analyzer-checker[-option] -help”, “-analyzer-checker[-option]-help-alpha” agus “-analyzer-checker[-option] -help "-leasachaidh"). Chaidh bratach “-analyzer-werror” a chur ris gus rabhaidhean a làimhseachadh mar mhearachdan.
    Modhan dearbhaidh ùra air an cur ris:

    • tèarainteachd.secureAPI.DeprecatedOrUnsafeBufferLàimhseachadh gus cleachdaidhean mì-shàbhailte a chomharrachadh airson a bhith ag obair le bufairean;
    • osx.MIGCchecker gus lorg a dhèanamh airson brisidhean air riaghailtean gairm MIG (Mach Interface Generator);
    • optin.osx.OSObjectCSstyleCast gus atharraichean nithean ceàrr XNU libkern a lorg;
    • apiModeling.llvm le seata de ghnìomhan sgrùdaidh modaladh gus mearachdan ann an còd LLVM a lorg;
    • Còd seasmhach airson a bhith a’ sgrùdadh nithean C ++ neo-aithnichte (UninitializedObject sa phasgan optin.cplusplus);
  • Tha an goireas cruth clang air taic a chuir ri cruth còd sa chànan C# agus a’ toirt taic don stoidhle fòrmatadh còd a bhios Microsoft a’ cleachdadh;
  • clang-cl, eadar-aghaidh loidhne-àithne eile a bheir seachad co-chòrdalachd ìre roghainn leis an inneal-cruinneachaidh cl.exe a tha air a ghabhail a-steach ann an Visual Studio, air heuristics a chuir ris gus faidhlichean nach eil ann a làimhseachadh mar roghainnean loidhne-àithne agus rabhadh co-fhreagarrach a thaisbeanadh (mar eisimpleir, nuair a bhios tu a’ ruith “clang-cl / diagnostic :caret / c test.cc”);
  • Chaidh cuibhreann mòr de sgrùdaidhean ùra a chuir ri linter clang-sgioblaichte, a’ toirt a-steach seicichean a bharrachd a tha sònraichte don OpenMP API;
  • Leudaichte comasan frithealaiche clangd (Frithealaiche Clang), anns a bheil am modh togail clàr-amais cùl-fhiosrachaidh air a chomasachadh gu bunaiteach, chaidh taic airson gnìomhan co-theacsail le còd a chuir ris (lorg caochlaideach, leudachadh air mìneachaidhean fèin-ghluasadach agus macro, tionndadh sreangan teicheadh ​​​​gu feadhainn nach deach a shàbhaladh), an comas taisbeanadh rabhaidhean bho Clang-tidy, breithneachaidh leudaichte de mhearachdan ann am faidhlichean cinn agus chuir e ris a’ chomas fiosrachadh a thaisbeanadh mun rangachd seòrsa;

prìomh innleachdan LLVM 9.0:

  • Chaidh feart dealachaidh deuchainneach a chur ris a’ cheangal LLD, a leigeas leat aon phrògram a roinn ann an grunn phàirtean, agus gach fear dhiubh suidhichte ann am faidhle ELF air leth. Leigidh am feart seo leat prìomh phàirt a’ phrògraim a chuir air bhog, a luchdaicheas co-phàirtean eile mar a dh’ fheumar rè obrachadh (mar eisimpleir, faodaidh tu an sealladair PDF togte a sgaradh ann am faidhle air leth, a luchdaicheas dìreach nuair a dh’ fhosglas an neach-cleachdaidh am PDF. faidhle).

    Ceangalaiche LLD air a thoirt air thoiseach gu staid a tha freagarrach airson an kernel Linux a cheangal airson ailtireachd arm32_7, arm64, ppc64le agus x86_64.
    Roghainnean ùra " -" (toradh gu stdout), "-[no-]allow-shlib-undefined", "-undefined-glob", "-nmagic", "-omagic", "-dependent-library", " - z ifunc-noplt" agus "-z common-page-size". Airson ailtireachd AArch64, chaidh taic airson stiùireadh BTI (Comharra Targaid Meur) agus PAC (Còd Dearbhaidh Pointer) a chuir ris. Tha taic airson àrd-ùrlaran MIPS, RISC-V agus PowerPC air a leasachadh gu mòr. Chuir sinn taic tùsail ris airson ceangal fiùghantach airson WebAssembly;

  • Ann an libc++ air a chur an gnìomh gnìomhan ssize, std :: is_constant_valuated, std :: midpoint agus std ::lerp, modhan “front” agus “back” air an cur ri std :: span, buadhan seòrsaichean std :: is_unbounded_array agus std:: is_bounded_array air a chur ris , tha comasan std air an leudachadh: :atomic. Chaidh stad a chuir air taic airson GCC 4.9 (faodar a chleachdadh le GCC 5.1 agus fiosan nas ùire). Taic air a chur ris WASI (Eadar-aghaidh Siostam WebAssembly, eadar-aghaidh airson WebAssembly a chleachdadh taobh a-muigh a’ bhrabhsair);
  • Chaidh optimizations ùra a chuir ris. Chuir sinn an comas gairmean memcmp a thionndadh gu bcmp ann an cuid de shuidheachaidhean. Cur an gnìomh sgrùdadh raon airson bùird leum far nach gabh na blocaichean suidse nas ìsle a ruighinn no nuair nach eilear a’ cleachdadh stiùireadh, mar eisimpleir, nuair a bhios tu a’ gairm ghnìomhan le seòrsa falamh;
  • Chaidh an backend airson ailtireachd RISC-V a dhèanamh seasmhach, nach eil air a shuidheachadh tuilleadh mar dheuchainneach agus a tha air a thogail gu bunaiteach. A’ toirt seachad làn thaic gineadh còd airson tionndaidhean seata stiùiridh RV32I agus RV64I le leudachadh MAFDC;
  • Chaidh mòran leasachaidhean a dhèanamh air backends airson ailtireachd X86, AArch64, ARM, SystemZ, MIPS, AMDGPU agus PowerPC. Mar eisimpleir, airson ailtireachd
    Chuir AArch64 taic ris airson stiùireadh SVE2 (Leudachadh Vector Scalable 2) agus MTE (Memory Tagging Extensions); ann an backend ARM, chaidh taic airson ailtireachd Armv8.1-M agus leudachadh MVE (M-Profile Vector Extension). Chaidh taic airson ailtireachd GFX10 (Navi) a chur ri backend AMDGPU, tha comasan gairm gnìomh air an comasachadh gu bunaiteach, agus tha pas aonaichte air a chuir an gnìomh DPP (Dàta-Co-shìnte Primitives).

  • Tha soilleireachadh dath aig an debugger LLDB a-nis airson lorgan air ais agus taic a bharrachd dha na blocaichean debug_types DWARF4 agus DWARF5 debug_info;
  • Chaidh taic airson faidhlichean nì is so-ghnìomhaichte ann an cruth COFF a chur ris na goireasan llvm-objcopy agus llvm-strip.

Source: fosgailtenet.ru

Cuir beachd ann