Liberazione di a suite di compilatori GCC 10

Dopu un annu di sviluppu publicatu liberazione di un inseme gratuitu di compilatori GCC 10.1, a prima liberazione maiò in a nova filiera GCC 10.x. In cunfurmità cù novu schema numeri di liberazione, a versione 10.0 hè stata aduprata in u prucessu di sviluppu, è pocu prima di a liberazione di GCC 10.1, a filiera GCC 11.0 avia digià ramificata, nantu à a basa di a quale a prossima liberazione significativa, GCC 11.1, seria furmata.

GCC 10.1 hè notu per l'implementazione di parechje innovazioni in a lingua C ++ sviluppata per u standard C ++ 20, miglioramenti ligati à u futuru standard di lingua C (C2x), novi ottimisazioni in i backend di compilatore è supportu sperimentale. Modu di analisi statica. Inoltre, durante a preparazione di una nova filiera, u prughjettu trasfirìu u repository da SVN à Git.

menu cambià:

  • Aggiuntu modu sperimentale di analisi statica "- fanalizatore", chì esegue l'analisi interprocedurale intensiva di risorse di i percorsi di esecuzione di codice è i flussi di dati in un prugramma. U modu hè capaci di detectà i prublemi in u stadiu di compilazione, cum'è chjama doppia à a funzione free () per una zona di memoria, fughe di descrittori di file, dereferencing è passanu punters nulli, accede à blocchi di memoria liberati, utilizendu valori micca inizializzati, etc. L'usu di u novu modu per u codice OpenSSL hà digià permessu di identificà vulnerabilità periculosa.
  • Ottimisazioni interprocedurali mejorate. U passaghju IPA-SRA (Interprocedural Scalar Shared Replacement) hè statu riprogettatu per travaglià à u tempu di ligame è, frà altre cose, avà sguassate i valori inutilizati calculati è restituiti. In u modu d'ottimisazione "-O2", l'opzione "-finline-functions" hè attivata, chì hè retuned per favurizà un codice più compactu nantu à u rendiment d'esekzione. U travagliu di l'euristica per l'implementazione di funzioni in linea hè stata accelerata. L'espansione in linea è l'euristiche di clonazione di funzioni ponu avà aduprà infurmazioni nantu à i intervalli di valore per predichendu l'efficacità di e trasfurmazioni individuali. Per C ++, l'accuratezza di l'analisi di alias basatu in tipu hè stata migliurata.
  • Ottimisazioni di u tempu di cunnessione (LTO) rinfurzata. Aggiuntu novu eseguibile lto-dump per resettate l'infurmazioni nantu à i fugliali di l'ughjettu cù bytecode LTO. I passaggi LTO paralleli determinanu automaticamente u nùmeru di attività di creazione simultaneamente in esecuzione è, se ùn ponu esse determinate, utilizate l'infurmazioni nantu à u nùmeru di core CPU cum'è un fattore di parallelizazione. Aggiunta l'abilità di cumpressione bytecode LTO utilizendu l'algoritmu zstd.
  • U mecanismu di ottimisazione basatu annantu à i risultati di u prufilu di codice (PGO - Profile-guided optimization) hè statu migliuratu, chì genera più codice ottimali basatu annantu à l'analisi di e caratteristiche di l'esekzione di codice. Mantenimentu di prufilu migliuratu durante a compilazione è a separazione di codice caldu / friddu. Via l'opzione "-fprofile-values» pò avà monitorà finu à 4 valori di prufilu, per esempiu per chjamate indirette è furnisce infurmazioni di prufilu più precise.
  • Specificazione di prugrammazione parallela implementata per i linguaggi C, C++ è Fortran OpenACC 2.6, chì definisce arnesi per l'operazione di scaricamentu nantu à GPU è processori specializati cum'è NVIDIA PTX. L'implementazione di u standard hè quasi cumpleta Aprite MP 5.0 (Open Multi-Processing), chì definisce l'API è i metudi di applicà metudi di prugrammazione parallela nantu à i sistemi multi-core è ibridi (CPU + GPU / DSP) cù unità di memoria è vectorization cumuni (SIMD). Funzioni aghjunte cum'è lastprivate conditionals, scan and loop directives, order and use_device_addr expressions. Per OpenMP è OpenACC, u supportu hè statu aghjuntu per l'operazione di scaricamentu in GPU di quarta generazione (Fiji) è AMD Radeon (GCN) di quinta generazione (VEGA 10/VEGA 20).
  • Per e lingue di a famiglia C, a funzione "accessu" hè stata aghjunta per descriverà l'accessu di a funzione à l'uggetti passati per riferimentu o puntatore, è per associà tali oggetti cù argumenti interi chì cuntenenu infurmazione nantu à a dimensione di l'uggetti. Per travaglià in cunghjunzione cù "accessu", l'attributu "tipu" hè implementatu per detectà l'accessu incorrectu da e funzioni di l'utilizatori, per esempiu, quandu scrive i valori in una zona fora di i limiti di l'array. Hè aghjuntu ancu l'attributu "symver" per associà simboli in un schedariu ELF cù numeri di versione specifica.
  • Novi avvirtimenti aghjuntu:
    • "-Wstring-compare" (attivatu cù "-Wextra") - avvistà nantu à a prisenza di espressioni in quale cero hè paragunatu cù u risultatu di chjamà e funzioni strcmp è strncmp, chì hè equivalente à una constante per u fattu chì a lunghezza di un argumentu hè più grande di a dimensione di l'array in u sicondu argumentu.
    • "-Wzero-length-bounds" (attivatu cù "-Warray-bounds") - avvistà nantu à l'accessu à l'elementi di array di lunghezza zero, chì ponu purtari à soprascrive altre dati.
    • L'avvisi "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" è "-Wstringop-overflow" sò stati allargati per espansione u numeru di situazioni fora di limiti. chì sò trattati.
  • Implementatu a capacità di specificà direttamente caratteri larghi in identificatori utilizendu a codificazione attuale (UTF-8 per difettu) invece di a notazione UCN (\uNNNN o \UNNNNNNNN). Per esempiu:

    static const int π = 3;
    int get_naïve_pi() {
    ritorna π;
    }

  • Per a lingua C, una parte di e funzioni novi sviluppate in u standard C2X hè stata implementata (attivata da specificà -std=c2x è -std=gnu2x): supportu per a sintassi "[[]]" hè apparsu per definisce attributi cum'è in C++ (per esempiu, [[gnu ::const]], [[deprecated]], [[fallthrough]] è [[maybe_unused]]. Aggiuntu supportu per a sintassi "u8" per definisce custanti cù caratteri UTF-8.
    Aghjunghjite novi macros à . Sustituzioni "%OB" è "%Ob" aghjunte à strftime.

  • U modu predeterminatu per C hè "-fno-common", chì permette un accessu più efficau à e variàbili glubale in certi piattaforme.
  • Per C++, circa 16 cambiamenti è innuvazioni sò stati implementati, sviluppati in u standard C++ 20. Includendu a chjave aghjunta "constinit"
    è u supportu per l'estensione di mudelli hè statu implementatu "cuncetti". I cuncetti permettenu di definisce un inseme di paràmetri di mudelli chì, à u tempu di compilazione, limitanu l'inseme di argumenti chì ponu esse accettati cum'è paràmetri di mudelli. I cuncetti ponu esse utilizati per evità inconsistenzi lògichi trà e proprietà di i tipi di dati utilizati in u mudellu è e proprietà di u tipu di dati di i paràmetri di input.

  • G ++ furnisce a rilevazione di cumpurtamentu indefinitu causatu da cambià l'uggetti custanti attraversu constexpr. U cunsumu di memoria ridutta da u compilatore quandu calcula constexpr. Aggiunti novi avvisi "-Wmismatched-tags" è "-Wredundant-tags".
  • Nove opzioni di linea di cumanda sò state pruposte:
    • "-fallocation-dce" per sguassà coppie inutile di operatori "novi" è "sguassate".
    • "-fprofile-partial-training" per disattivà l'ottimisazione di dimensione per u codice chì ùn hà micca una corsa di furmazione.
    • "-fprofile-reproducible per cuntrullà u livellu di riproducibilità di u prufilu.
    • "-fprofile-prefix-path" per definisce u repertoriu di custruzzione di fonte di basa utilizatu per a generazione di profili separati (per "-fprofile-generate=profile_dir" è "-fprofile-use=profile_dir").
  • In u testu d'avvertimentu per l'opzioni citate, i ligami ipertesi sò furniti chì permettenu di andà à a documentazione per queste opzioni. A sustituzione URL hè cuntrullata cù l'opzione "-fdiagnostics-urls".
  • Operatore di preprocessore aghjuntu "__hà_custruitu", chì pò esse usatu per verificà e funzioni integrate.
  • Aggiunta una nova funzione integrata "__builtin_roundeven" cù una implementazione di a funzione di arrotondamentu definita in a specificazione ISO / IEC TS 18661, simile à "round", ma a parte di arrotondamentu più grande di 0.5 (à un valore più grande), menu di 0.5. - down (à zero), è uguali à 0.5 - partendu da a parità di u penultimu cifru.
  • Per l'architettura AArch64, u supportu per l'estensione SVE2 hè statu aghjuntu è u supportu per SVE (Scalable Vector Extension) hè statu migliuratu, cumpresu un supportu aghjuntu per e funzioni è tipi di SVE ACLE integrati, è l'usu di vectorization. U supportu per LSE (Large System Extensions) è TME (Transactional Memory Extension) hè statu allargatu. Aghjunghjite novi struzzioni pruposti in Armv8.5-A è Armv8.6-A, cumprese struzzioni per a generazione di numeri aleatorii, arrotondamentu, associazione di tag di memoria,
    bfloat16 è a multiplicazione di matrici. Supportu di processore aghjuntu
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 è
    Marvell ThunderX3.

  • Aggiuntu supportu per ABI FDPIC (puntatori di funzione 32-bit) per ARM64. Trattamentu riprogettatu è ottimizatu di l'operazioni integer 64-bit. Supportu CPU aghjuntu
    Arm Cortex-A77,
    Arm Cortex-A76AE è
    Arm Cortex-M35P. Supportu allargatu per l'istruzzioni di trattamentu di dati ACLE, cumprese SIMD 32-bit, multiplicazione 16-bit, aritmetica di latch, è altre ottimisazioni di l'algoritmi DSP. Aggiuntu supportu sperimentale per l'istruzzioni ACLE CDE (Custom Datapath Extension).

  • Generazione di codice è vectorizazione significativamente migliorata in u backend per i GPU AMD basati nantu à a microarchitettura GCN.
  • Aghjunghje supportu per i dispositi simili à XMEGA per l'architettura AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808, ATmega809, ATmega1608, ATmega1609, ATmega3208 3209, ATmega4808 è ATmega4809.

  • Una nova estensione di l'architettura di set di istruzioni Intel ENQCMD (-menqcmd) hè stata aghjunta per l'architetture IA-32/x86-64. Supportu aghjuntu per Intel Cooperlake (-march = cooperlake, include l'estensione AVX512BF16 ISA) è Tigerlake (-march = tigerlake, include l'estensione MOVDIRI, MOVDIR64B è AVX512VP2INTERSECT ISA) CPU.
  • Una implementazione di l'HSAIL (Lingua Intermedia di Architettura di Sistema Heterogeneu) per i sistemi informatici eterogenei basati nantu à l'architettura HSA hè stata deprecata è probabilmente serà eliminata in una futura versione.

Source: opennet.ru

Add a comment