Σχεδίαση και Υλοποίηση ενός Optimization Pass στο LLVM για την Αναγνώριση Ιδιωμάτων Κώδικα
Date
Authors
Journal Title
Journal ISSN
Volume Title
Publisher
Abstract
Η σύγχρονη μεταγλώττιση βασίζεται στην ικανότητα των μεταγλωττιστών να μετασχηματίζουν κώδικα υψηλού επιπέδου σε αποδοτικές εντολές μηχανής. Ωστόσο, κατά τη διαδικασία μετάφρασης στην Ενδιάμεση Αναπαράσταση (Intermediate Representation - IR), η αρχική πρόθεση του προγραμματιστή συχνά συσκοτίζεται, οδηγώντας σε αυτό που ονομάζεται «Σημασιολογικό Χάσμα» (Semantic Gap). Πολύπλοκα μαθηματικά ιδιώματα υποβιβάζονται σε φλύαρες ακολουθίες γενικών εντολών, εμποδίζοντας την αξιοποίηση εξειδικευμένου υλικού. Η παρούσα διπλωματική εργασία αντιμετωπίζει αυτό το πρόβλημα μέσω της σχεδίασης και υλοποίησης του PatternSelectPass, ενός περάσματος βελτιστοποίησης (Optimization Pass) ενταγμένου στον Νέο Διαχειριστή Περασμάτων (New Pass Manager) του LLVM. Το προτεινόμενο εργαλείο χρησιμοποιεί προηγμένες τεχνικές ταύτισης προτύπων (pattern matching) για τον εντοπισμό επτά (7) κρίσιμων αριθμητικών ιδιωμάτων, συμπεριλαμβανομένων της Περιστροφής Bit (Rotate), της Καταμέτρησης Πληθυσμού (PopCount), της Ακέραιας Απόλυτης Τιμής (Abs) και των πράξεων Ελαχίστου/Μεγίστου (Min/Max). Μόλις αναγνωριστούν, αυτές οι ακολουθίες αντικαθίστανται αυτόματα από τις αντίστοιχες Εγγενείς Συναρτήσεις (Intrinsics) του LLVM. Η πειραματική αξιολόγηση σε στοχευμένα σενάρια ελέγχου κατέδειξε ότι το PatternSelectPass επιτυγχάνει μείωση του στατικού αριθμού εντολών κατά 52.9% σε σύγκριση με τον μη βελτιστοποιημένο κώδικα, ξεπερνώντας σε συγκεκριμένες περιπτώσεις ακόμη και τον καθιερωμένο βελτιστοποιητή InstCombine. Επιπλέον, η χρήση intrinsics οδηγεί σε σημαντική απλοποίηση του Γράφου Ροής Ελέγχου (Control Flow Graph), εξαλείφοντας περιττές διακλαδώσεις και προετοιμάζοντας το έδαφος για βέλτιστη παραγωγή κώδικα στο backend.

