Famoahana ny suite compiler LLVM 11.0

Taorian'ny enim-bolana ny fampandrosoana aseho famoahana tetikasa LLVM 11.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 fiovana lehibe tamin'ny famoahana vaovao dia ny fampidirana ny Flank, frontend ho an'ny fiteny Fortran. Flang dia manohana an'i Fortran 2018, OpenMP 4.5 ary OpenACC 3.0, saingy tsy mbola vita ny fampivoarana ny tetikasa ary ny faran'ny farany dia voafetra amin'ny famafazana kaody sy ny fanamarinana ny marina. Tsy mbola tohanana ny famokarana kaody mpanelanelana LLVM ary mba hamoronana rakitra azo tanterahana, ny kaody kanônika dia amboarina ary ampitaina amin'ny compiler Fortran ivelany.

fanatsarana ao amin'ny Clang 11.0:

  • Nampiana ny fahafahana mamerina ny hazo syntax abstract (AST) ho an'ny kaody C ++ tapaka, izay azo ampiasaina hanampiana amin'ny fitiliana ny lesoka ary manome fampahalalana fanampiny amin'ny fitaovana ivelany toy ny clang-tidy sy clangd. Ny endri-javatra dia alefa amin'ny alàlan'ny kaody C ++ ary fehezina amin'ny alàlan'ny safidy "-Xclang -f [no-] recovery-ast".
  • Nampiana fomba diagnostika vaovao:
    • "-Wpointer-to-int-cast" dia vondrona fampitandremana momba ny fandefasana tondro amin'ny karazana integer int izay tsy mahafeno ny sanda rehetra azo atao.
    • "-Wuninitialized-const-reference" - fampitandremana momba ny fampitandremana ireo fari-pahalalana tsy voatanisa ao amin'ny masontsivana fiasa izay manaiky ny tohan-kevitra reference miaraka amin'ny toetra "const".
    • "-Wimplicit-const-int-float-conversion" - alefa amin'ny alàlan'ny fampitandremana mahazatra momba ny fiovam-po an-kolaka ny tena tsy miova ho karazana integer.
  • Ho an'ny sehatra ARM, ny fiasa C natsangana ao amin'ny compiler dia omena (Intrinsics), nosoloina toromarika vector mahomby Arm v8.1-M MVE sy CDE. Ny fiasa misy dia voafaritra ao amin'ny fisie header arm_mve.h sy arm_cde.h.
  • nanampy andiana karazana integer miitatra _ExtInt(N), mamela anao hamorona karazany tsy misy hery roa tonta, izay azo karakaraina tsara amin'ny FPGA/HLS. Ohatra, _ExtInt(7) dia mamaritra karazana integer misy 7 bit.
  • Makro fanampiny izay mamaritra ny fanohanana ny asa C naorina mifototra amin'ny torolalana ARM SVE (Scalable Vector Extension):
    __ARM_FEATURE_SVE, __ARM_FEATURE_SVE_BF16,
    __ARM_FEATURE_SVE_MATMUL_FP32, __ARM_FEATURE_SVE_MATMUL_FP64,
    __ARM_FEATURE_SVE_MATMUL_INT8,
    __ARM_FEATURE_SVE2, __ARM_FEATURE_SVE2_AES,
    __ARM_FEATURE_SVE2_BITPERM,
    __ARM_FEATURE_SVE2_SHA3,
    __ARM_FEATURE_SVE2_SM4. Ohatra, ny macro __ARM_FEATURE_SVE dia voafaritra rehefa mamorona kaody AArch64 amin'ny fametrahana ny safidy andalana "-march=armv8-a+sve".

  • Ny saina "-O" dia fantatra amin'izao fotoana izao miaraka amin'ny maodely fanatsarana "-O1" fa tsy "-O2".
  • Nampiana saina mpanangona vaovao:
    • "-fstack-clash-protection" - manome fiarovana amin'ny fihaonan'ny stack sy heap.
    • "-ffp-exception-behavior={ignore,maytrap,strict}" - mamela anao hisafidy ny fomba mpanentana miavaka ho an'ny isa mitsingevana.
    • "-ffp-model={precise,strict,fast}" - Manamora ny fidirana amina andiana safidy manokana ho an'ny isa mitsingevana.
    • "-fpch-codegen" sy "-fpch-debuginfo" hamorona lohapejy efa voaomana (PCH) miaraka amin'ny rakitra zavatra misaraka ho an'ny code sy debuginfo.
    • "-fsanitize-coverage-allowlist" sy "-fsanitize-coverage-blocklist" mba hanamarinana ny fitiliana ny lisitra fotsy sy mainty.
    • “-mtls-size={12,24,32,48}” hisafidianana ny haben'ny TLS (thread-local storage).
    • "-menable-experimental-extension" ahafahan'ny fanitarana RISC-V andrana.
  • Ny fomba mahazatra ho an'ny C dia "-fno-common", izay ahafahana miditra amin'ny fomba mahomby kokoa amin'ny fari-piainana manerantany amin'ny sehatra sasany.
  • Ny cache module default dia nafindra avy amin'ny /tmp mankany amin'ny lahatahiry ~/.cache. Mba hanesorana dia azonao ampiasaina ny saina "-fmodules-cache-path=".
  • Ny fenitry ny fiteny C default dia nohavaozina manomboka amin'ny gnu11 mankany amin'ny gnu17.
  • Nampiana fanohanana mialoha ny fanitarana GNU C "asm inline»hampiditra fampidirana assembler. Mbola eo am-panadihadiana ny fanitarana, fa tsy voakarakara amin'ny fomba rehetra.
  • Nitarina ny fahaiza-manao mifandraika amin'ny fanohanan'ny OpenCL sy CUDA. Fanampiana fanampiny ho an'ny diagnostika sakana OpenCL 2.0 ary nampihatra ireo endri-javatra OpenMP 5.0 vaovao.
  • Nampiana IndentExternBlock safidy ho an'ny clang-format utility ho an'ny fampifanarahana ao anaty sakana "C" sy ivelany "C++".
  • Ny mpandinika static dia nanatsara ny fitantanana ireo mpamorona nolovaina ao amin'ny C ++. Nampiana fanamarinana vaovao alpha.core.C11Lock sy alpha.fuchsia.Lock hijerena hidin-trano, alpha.security.cert.pos.34c hamantarana ny fampiasana tsy azo antoka ny putenv, webkit.NoUncountedMemberChecker ary webkit.RefCntblBaseVirtualDtor hamantarana ireo olana amin'ny karazana tsy tambo isaina, alpha .cplusplus .SmartPtr hanamarina ny tsy fahampian'ny pointer smart.
  • Ao amin'ny linter clang-fidy nanampy ampahany betsaka amin'ny seky vaovao.
  • Ny mpizara clangd caching (Clang Server) dia nanatsara ny fampisehoana ary nanampy fahaiza-manao diagnostika vaovao.

tena fanavaozana LLVM 11.0:

  • Ny rafitra fananganana dia novaina ho amin'ny fampiasana Python 3. Raha tsy misy ny Python 3 dia azo atao ny miverina amin'ny fampiasana Python 2.
  • Ny faran'ny anoloana misy ny mpanangona ny fiteny Go (llgo) dia tsy tafiditra ao anatin'ny famoahana, izay mety hamboarina amin'ny ho avy.
  • Ny toetra vector-function-abi-variant dia nampiana tao amin'ny representation intermediate (IR) mba hamaritana ny sari-tany eo amin'ny scalar sy ny vesatra miasa amin'ny vectorize antso. Avy amin'ny llvm::VectorType dia misy karazana vector roa misaraka llvm::FixedVectorType sy llvm::ScalableVectorType.
  • Ny sampana mifototra amin'ny soatoavin'ny udef sy ny fandefasana soatoavina tsy misy dikany amin'ny famakiam-boky mahazatra dia ekena ho fihetsika tsy voafaritra. IN
    memset/memcpy/memmove dia mamela ny fanondro tsy misy dikany, fa raha aotra ny mari-pamantarana misy habe.

  • LLJIT dia nanampy fanohanana amin'ny fanaovana fanombohana static amin'ny alàlan'ny LLJIT :: initiaize sy LLJIT :: deinitialize fomba. Nampihatra ny fahafahana manampy tranomboky static amin'ny JITDylib amin'ny fampiasana ny kilasy StaticLibraryDefinitionGenerator. Nampiana C API ho an'ny ORCv2 (API ho an'ny fananganana JIT compiler).
  • Ny fanohanan'ny Cortex-A64, Cortex-A34, Cortex-A77 ary ny Cortex-X78 processeur dia nampiana tao ambadika ho an'ny maritrano AArch1. Nampihatra ARMv8.2-BF16 (BFloat16) sy ARMv8.6-A fanitarana, anisan'izany ny RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitors virtualization) ary ARMv8.0-DGH (Torohevitra fanangonana angona). Ny fahafaha-mamokatra kaody ho an'ny fatorana naorina-in amin'ny torolàlana vector SVE dia omena.
  • Ny fanohanan'ny Cortex-M55, Cortex-A77, Cortex-A78 ary ny Cortex-X1 processeur dia nampiana tao amin'ny backend ho an'ny maritrano ARM. Nampiharina ny fanitarana
    Armv8.6-A Matrix Multiply ary RMv8.2-AA32BF16 BFloat16.

  • Ny fanohanana ny famoronana kaody ho an'ny processeur POWER10 dia nampiana tao amin'ny backend ho an'ny rafitra PowerPC. Nitarina ny fanatsarana ny loop ary nohatsaraina ny fanohanana teboka mitsingevana.
  • Ny backend ho an'ny maritrano RISC-V dia mamela ny fanekena ny patch izay manohana ny andrana fanitarana fampianarana izay mbola tsy nekena tamin'ny fomba ofisialy.
  • Ny backend ho an'ny maritrano AVR dia nafindra avy amin'ny sokajy andrana mankany amin'ny stable, tafiditra ao anatin'ny fizarana fototra.
  • Ny backend ho an'ny maritrano x86 dia manohana ny torolàlana Intel AMX sy TSXLDTRK. Fanampiana fiarovana amin'ny fanafihana LVI (Load Value Injections), ary manatanteraka ihany koa ny mekanika fanafoanana ny fanafihan'ny Speculative Execution ankapobeny mba hanakanana ny fanafihana vokatry ny fanombantombanana ny fanatanterahana ny asa amin'ny CPU.
  • Ao ambadiky ny rafitra SystemZ dia nampiana ny fanohanana ny MemorySanitizer sy LeakSanitizer.
  • Fanampiana fanampiny ho an'ny rakitra lohapejy miaraka amin'ny tsy miovaova matematika amin'ny Libc ++ .
  • nitarina Ireo singa mifandraika amin'ny LLD. Fanohanana nohatsaraina ho an'ny endrika ELF, ao anatin'izany ny safidy fanampiny "--lto-emit-asm", "--lto-program-visibility", "-print-archive-stats", "-shuffle-sections", " -thinlto- single-module", "-unique", "-rosegment", "-threads=N". Nampiana safidy "--time-trace" hitahiry ny trace amin'ny rakitra iray, izay azo dinihina amin'ny alàlan'ny chrome://tracing interface ao amin'ny Chrome.

Source: opennet.ru

Add a comment