LLVM 11.0 pojawia się wraz z aktualizacją do Pythona 3, ulepszeniami dla RISC-V i nie tylko

LLVM

Po sześciu miesiącach rozwoju Zaprezentowano start nowej edycji projektu LLVM 11.0 w którym przedstawiono kilka ulepszeń, takich jak aktualizacja do Pythona 3, poprawki obsługujące instrukcje eksperymentalne w RISC-V i wiele innych zmian.

Ci, którzy nie są zaznajomieni z LLVM, powinni wiedzieć, co to jest zestaw narzędzi zgodny z GCC (kompilatory, optymalizatory i generatory kodu), które kompilują programy do pośrednich instrukcji wirtualnych z kodem bitowym typu RISC (maszyna wirtualna niskiego poziomu z wielopoziomowym systemem optymalizacji).

Jest przeznaczony do optymalizacji czasu kompilacji, czas wiązania, czas wykonania w dowolnym języku programowania, który użytkownik chce zdefiniować. Pierwotnie zaimplementowany do kompilacji C i C ++, Język niezależny od języka LLVM i sukces projektu stworzyli szeroką gamę języków.

Wygenerowany pseudokod można przekształcić za pomocą kompilatora JIT na instrukcje maszynowe bezpośrednio w czasie wykonywania programu.

Główne nowe funkcje LLVM 11.0

W tej nowej wersji LLVM 11.0 system kompilacji został przeniesiony na Python 3W związku z tym użycie Pythona 3 nie jest wymuszone, ponieważ w przypadku, gdy nie jest dostępny, opcja wycofania jest zaimplementowana do korzystania z Pythona 2.

Atrybut dodano wariant funkcji wektorowej abi do reprezentacji pośredniej (IR) opisać mapowanie między funkcjami skalarnymi i wektorowymi do wywołań wektoryzacji. Dwa oddzielne typy wektorów, llvm :: FixedVectorType i llvm :: ScalableVectorType, są wyodrębniane z llvm :: VectorType.

Niezdefiniowane zachowanie polega na rozgałęzianiu opartym na undef i przekazywaniu niezdefiniowanych wartości do standardowych funkcji bibliotecznych.

W memset / memcpy / memmove dozwolone jest przekazywanie niezdefiniowanych wskaźników, ale jeśli parametr o rozmiarze jest równy zero.

LLJIT dodaje obsługę statycznych inicjalizacji poprzez metody LLJIT :: initialize i LLJIT :: deinitialize.

Dodano możliwość dodawania bibliotek statycznych do JITDylib przy użyciu klasy StaticLibraryDefinitionGenerator. Dodano C API dla ORCv2 (API do tworzenia kompilatorów JIT).

Ze względu na poprawę obsługi różnych architektur procesorów:

  • Dodany obsługa procesorów Cortex-A34, Cortex-A77, Cortex-A78 i Cortex-X1 na zapleczu architektury AArch64. Zaimplementowano rozszerzenia ARMv8.2-BF16 (BFloat16) i ARMv8.6-A, w tym RMv8.6-ECV (Enhanced Counter Virtualization), ARMv8.6-FGT (Fine Grained Traps), ARMv8.6-AMU (Activity Monitory wirtualizacji) i ARMv8.0-DGH (wskazówka dotycząca zbierania danych).
  • Dodano obsługę procesorów Cortex-M55, Cortex-A77, Cortex-A78 i Cortex-X1 na zapleczu ARM. Zaimplementowano rozszerzenia Armv8.6-A Matrix Multiply i RMv8.2-AA32BF16 BFloat16.
  • Dodano obsługę generowania kodu dla procesorów POWER10 w zapleczu PowerPC. Ulepszone optymalizacje pętli i ulepszona obsługa operacji zmiennoprzecinkowych.
  • Zaplecze architektury RISC-V może otrzymywać poprawki ze wsparciem dla eksperymentalnych rozszerzonych zestawów instrukcji, które nie zostały jeszcze oficjalnie zatwierdzone.

Oprócz tego zapewniona jest możliwość generowania kodu dla funkcji powiązań zintegrowane z instrukcjami wektorowymi SVE.

Backend dla architektury AVR został przeniesiony z kategorii eksperymentalnej do stabilnej zawartej w podstawowej dystrybucji.

Backend x86 obsługuje instrukcje Intel AMX i TSXLDTRK. Dodano ochronę przed atakami LVI (Load Value Injection) oraz ogólny mechanizm eliminacji efektów ubocznych wykonania spekulacyjnego również został zaimplementowany w celu blokowania ataków spowodowanych spekulacyjnym wykonywaniem operacji na procesorze.

Z innych wyróżniających się zmian:

  • Backend dla architektury SystemZ dodaje obsługę MemorySanitizer i LeakSanitizer.
  • Libc ++ dodaje obsługę pliku nagłówka stałej matematycznej .
  • Rozszerzone możliwości linkera LLD.
  • Ulepszona obsługa ELF, w tym dodane opcje „–lto-emit-asm”, „–lto-all-program-visible”, „–print-archive-stats”, „–shuffle-section”, „–thinlto-single -module „,” –Unique ”,„ –rosegment ”,„ –threads = N ”.
  • Dodano opcję „–time-trace”, aby zapisać ślad do pliku, który można następnie przeanalizować przez interfejs chrome: // trace w Chrome.
  • Interfejs z kompilatorem Go (llgo) został usunięty z wydania i może zostać przebudowany w przyszłości.

W końcu jeśli chcesz dowiedzieć się więcej na ten temat o nowej wersji możesz sprawdzić szczegóły w poniższym linku.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: AB Internet Networks 2008 SL
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.