Κυκλοφορία της σουίτας μεταγλωττιστή LLVM 13.0

Μετά από έξι μήνες ανάπτυξης, παρουσιάστηκε η κυκλοφορία του έργου LLVM 13.0 - μια εργαλειοθήκη συμβατή με το GCC (μεταγλωττιστές, βελτιστοποιητές και γεννήτριες κώδικα) που μεταγλωττίζει προγράμματα σε ενδιάμεσο bitcode εικονικών οδηγιών τύπου RISC (μια εικονική μηχανή χαμηλού επιπέδου με σύστημα βελτιστοποίησης πολλαπλών επιπέδων). Ο ψευδοκώδικας που δημιουργείται μπορεί να μετατραπεί χρησιμοποιώντας έναν μεταγλωττιστή JIT σε οδηγίες μηχανής απευθείας τη στιγμή της εκτέλεσης του προγράμματος.

Βελτιώσεις στο Clang 13.0:

  • Υλοποιημένη υποστήριξη για εγγυημένες κλήσεις ουράς (κλήση υπορουτίνας στο τέλος μιας συνάρτησης, σχηματισμός αναδρομής ουράς εάν η υπορουτίνα καλεί τον εαυτό της). Η υποστήριξη για εγγυημένες κλήσεις ουράς παρέχεται από το χαρακτηριστικό "[[clang::musttail]]" στη C++ και "__attribute__((musttail))" στο C, που χρησιμοποιείται σε μια δήλωση "return". Η δυνατότητα σάς επιτρέπει να εφαρμόζετε βελτιστοποιήσεις με την ανάπτυξη κώδικα σε μια επίπεδη επανάληψη για εξοικονόμηση κατανάλωσης στοίβας.
  • Οι δηλώσεις "χρήση" και οι επεκτάσεις clang παρέχουν υποστήριξη για τον ορισμό χαρακτηριστικών τύπου C++11 χρησιμοποιώντας τη μορφή "[[]]".
  • Προστέθηκε η σημαία "-Wreserved-identifier" για να εμφανίζεται μια προειδοποίηση όταν καθορίζετε δεσμευμένα αναγνωριστικά στον κωδικό χρήστη.
  • Προστέθηκαν οι σημαίες "-Wunused-but-set-parameter" και "-Wunused-but-set-variable" για να εμφανιστεί μια προειδοποίηση εάν μια παράμετρος ή μια μεταβλητή έχει οριστεί αλλά δεν χρησιμοποιείται.
  • Προστέθηκε η σημαία "-Wnull-pointer-subtraction" για την έκδοση προειδοποίησης εάν ο κώδικας ενδέχεται να εισάγει απροσδιόριστη συμπεριφορά λόγω της χρήσης ενός μηδενικού δείκτη σε πράξεις αφαίρεσης.
  • Προστέθηκε η σημαία "-fstack-usage" για να δημιουργήσει για κάθε αρχείο κώδικα ένα πρόσθετο αρχείο ".su" που περιέχει πληροφορίες σχετικά με το μέγεθος των πλαισίων στοίβας για κάθε συνάρτηση που ορίζεται στο υπό επεξεργασία αρχείο.
  • Ένας νέος τύπος εξόδου προστέθηκε στον στατικό αναλυτή - "sarif-html", ο οποίος οδηγεί στη δημιουργία αναφορών ταυτόχρονα σε μορφές HTML και Sarif. Προστέθηκε νέος έλεγχος allocClassWithName. Όταν καθορίζετε την επιλογή «-analyzer-display-progress», εμφανίζεται ο χρόνος ανάλυσης κάθε λειτουργίας. Ο έξυπνος αναλυτής δείκτη (alpha.cplusplus.SmartPtr) είναι σχεδόν έτοιμος.
  • Οι δυνατότητες που σχετίζονται με την υποστήριξη OpenCL έχουν επεκταθεί. Προστέθηκε υποστήριξη για νέες επεκτάσεις cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields και __cl_clang_non_portable_kernel_param_types. Η εφαρμογή της προδιαγραφής OpenCL 3.0 συνεχίστηκε. Για το C, η προδιαγραφή OpenCL 1.2 χρησιμοποιείται από προεπιλογή, εκτός εάν έχει επιλεγεί ρητά άλλη έκδοση. Για την C++, έχει προστεθεί υποστήριξη για αρχεία με την επέκταση “.clcpp”.
  • Έχει υλοποιηθεί η υποστήριξη για οδηγίες μετασχηματισμού βρόχου ("#pragma omp unrol" και "#pragma omp tile") που ορίζονται στην προδιαγραφή OpenMP 5.1.
  • Προστέθηκαν επιλογές στο βοηθητικό πρόγραμμα μορφοποίησης clang: SpacesInLineCommentPrefix για να ορίσετε τον αριθμό των διαστημάτων πριν από τα σχόλια, IndentAccessModifiers, LambdaBodyIndentation και PPIndentWidth για έλεγχο της ευθυγράμμισης των καταχωρήσεων, των εκφράσεων λάμδα και των οδηγιών προεπεξεργαστή. Οι δυνατότητες ταξινόμησης της απαρίθμησης των αρχείων κεφαλίδας (SortIncludes) έχουν επεκταθεί. Προστέθηκε υποστήριξη για τη μορφοποίηση αρχείων JSON.
  • Ένα μεγάλο μέρος νέων επιταγών έχει προστεθεί στο liter clang-tidy.

Βασικές καινοτομίες στο LLVM 13.0:

  • Προστέθηκε η επιλογή «-ehcontguard» για τη χρήση της τεχνολογίας CET (Windows Control-flow Enforcement Technology) για προστασία από την εκτέλεση εκμεταλλεύσεων που έχουν δημιουργηθεί με χρήση τεχνικών προγραμματισμού προσανατολισμένου στην επιστροφή (ROP) στο στάδιο χειρισμού εξαιρέσεων.
  • Το έργο εντοπισμού σφαλμάτων-test έχει μετονομαστεί σε cross-project-tests και έχει σχεδιαστεί για να δοκιμάζει στοιχεία από διαφορετικά έργα, χωρίς να περιορίζεται σε πληροφορίες εντοπισμού σφαλμάτων.
  • Το σύστημα συναρμολόγησης παρέχει υποστήριξη για τη δημιουργία πολλών διανομών, για παράδειγμα, η μία με βοηθητικά προγράμματα και η άλλη με βιβλιοθήκες για προγραμματιστές.
  • Στο backend για την αρχιτεκτονική AArch64, η υποστήριξη για τις επεκτάσεις Armv9-A RME (Realm Management Extension) και SME (Scalable Matrix Extension) υλοποιείται στο assembler.
  • Η υποστήριξη για το ISA V68/HVX έχει προστεθεί στο backend για την αρχιτεκτονική Hexagon.
  • Το backend x86 έχει βελτιωμένη υποστήριξη για επεξεργαστές AMD Zen 3.
  • Προστέθηκε υποστήριξη για GFX1013 RDNA2 APU στο backend AMDGPU.
  • Το Libc++ συνεχίζει να εφαρμόζει νέες δυνατότητες των προτύπων C++20 και C++2b, συμπεριλαμβανομένης της ολοκλήρωσης της βιβλιοθήκης «εννοιών». Προστέθηκε υποστήριξη για το σύστημα αρχείων std:: για την πλατφόρμα Windows που βασίζεται σε MinGW. Τα αρχεία κεφαλίδας , και διαχωρίζονται. Προστέθηκε η επιλογή κατασκευής LIBCXX_ENABLE_INCOMPLETE_FEATURES για την απενεργοποίηση αρχείων κεφαλίδας με μη πλήρως υλοποιημένη λειτουργικότητα.
  • Οι δυνατότητες του συνδετήρα LLD έχουν επεκταθεί, στον οποίο υλοποιείται υποστήριξη για επεξεργαστές Big-endian Aarch64 και το backend Mach-O έχει τεθεί σε κατάσταση που επιτρέπει τη σύνδεση κανονικών προγραμμάτων. Περιλαμβάνονται βελτιώσεις που απαιτούνται για τη σύνδεση του Glibc χρησιμοποιώντας LLD.
  • Το βοηθητικό πρόγραμμα llvm-mca (Machine Code Analyzer) έχει προσθέσει υποστήριξη για επεξεργαστές που εκτελούν εντολές με τη σειρά (in-order superscalar pipeline), όπως ο ARM Cortex-A55.
  • Το πρόγραμμα εντοπισμού σφαλμάτων LLDB για την πλατφόρμα AArch64 παρέχει πλήρη υποστήριξη για τους καταχωρητές Pointer Authentication, MTE (MemTag, Memory Tagging Extension) και SVE. Προστέθηκαν εντολές που σας επιτρέπουν να συνδέετε ετικέτες σε κάθε λειτουργία εκχώρησης μνήμης και να οργανώνετε έναν έλεγχο του δείκτη κατά την πρόσβαση στη μνήμη, ο οποίος πρέπει να συσχετίζεται με τη σωστή ετικέτα.
  • Το πρόγραμμα εντοπισμού σφαλμάτων LLDB και το frontend για τη γλώσσα Fortran - Flang έχουν προστεθεί στις δυαδικές συναρμολογήσεις που δημιουργούνται από το έργο.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο