LLVM 3.2 i Clang 3.2

LLVM 3.2 i Clang 3.2

    przez -
    4 348
    LLVM
    Chris Lattner ogłosił wydanie LLVM 3.2 razem z z front-endem kompilatora dla języków C, C++ oraz Objective-C – Clang 3.2. Projekt LLVM obejmuje narzędzia takie jak kompilator języków C/C++/Objective-C – Clang, bibliotekę kompilatora czasu pracy (runtime compiler) compiler-rt, niskopoziomowy debugger LLDB, biblioteka standardowa libc++ dla C++ i VMKit JVM używająca LLVM dla kompilacji statycznej i JIT. Celem projektu jest stworzenie alternatywy dla kompilatora z projektu GCC. Prace nad projektami sponsorowane są przez Apple, a wszystko wydawane jest na licencji BSD.

    W nowej wersji dodano nowy potężniejszy zamiennik skalara dla modelu agregatorów (SROA). Generował on kod, który mógł być optymalizowano o wiele łatwiej, podczas dalszego łańcucha kompilacji. W przeszłości skalowanie powodowało problemy i SROA został ograniczony do małych agregatów. Dzięki nowym algorytmom owe limity zostały zdjęte.

    Backend NVPTX zastąpił obecny do tej pory backend PTX. Bazuje na kodzie LLVM, używanym w kompilatorach nVidia CUDA i OpenCL. NVPTX jest kompatybilny ze starszymi backendami i wspiera funkcje NVVM intrinsics, zdefiniowane w nVidia Compiler SDK. Dodano nowy wektoryzer pętli, który lepiej współgra z małymi pętlami, ale został on domyślnie wyłączony. Można go uruchomić za pomocą flagi: -mllvm-vectorize-loops.

    Clang otrzymał lepsze raportowanie diagnostyczne, które wyłapuje więcej błędów i wiadomości informujących o nich. Pojawiło się wsparcie atrybutu tls_model, który pozwala ustawić, jakie ma być używane sortowanie trybu pamięci lokalnej wątku. Udoskonalono bezpieczeństwo typów.

    Dodano wtyczkę DragonEgg GCC, która pozwala wspiera ładowanie trybu pamięci lokalnej wątku. Dodatkowo DragonEgg nie wymaga więcej GCC, do budowania ze wsparciem LTO. Biblioteka uruchomieniowa compiler-rt zawiera wykrywacz trasy daty ThreadSanitizer oraz udoskonalenia dla AddressSanitizer.