Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 3 η : Ενδιάμεση Αναπαράσταση/ SSA Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Ενδιάμεση Αναπαράσταση (IR) Η ενδιάμεση αναπαράσταση αποθηκεύει τη συγκεντρωμένη πληροφορία από την ανάλυση ενός προγράμματος Από την ενδιάμεση αναπαράσταση ξεκινάει η παραγωγή τελικού κώδικα Σημαντικός στόχος του σχεδιαστή ενός μεταγλωττιστή αποτελεί η ανεξαρτητοποίηση του εμπρόσθιου από το οπίσθιο τμήμα με τη βοήθεια μιας ισχυρής αλλά ευέλικτης ενδιάμεσης αναπαράστασης
Μορφές IR Γραμμικές αναπαραστάσεις Πλησιέστερα στον τελικό κώδικα Δύσκολες για βελτιστοποίηση Αναπαραστάσεις γραφημάτων Πλησιέστερα στον αρχικό κώδικα Πιο ευέλικτες για βελτιστοποίηση SSA Ουσιαστικά γραμμική αναπαράσταση Καλή για βελτιστοποίηση
Παράδειγμα Αρχικός κώδικας: if (x>y) a=a+3; else a=a-2; b=a; Τετράδες: 1: <=,x,y,5 2: +,a,3,$1 3: :=,$1,-,a 4: jump,-,-,7 5: -,a,2,$2 6: :=,$2,-,a 7: :=,a,-,b x > AST: y a if = a stmt + 3 a = a b - = 2 a SSA: if (x>y) a1:=a+3 else a2:=a-2 a3:=φ(a1,a2) b:=a3
Εισαγωγή στημορφή SSA Ένα πρόγραμμα βρίσκεται σε μορφή SSA (Static Single-Assignment), εάν και μόνο εάν: Κάθε μεταβλητή ορίζεται στατικά ακριβώς μία φορά, και Κάθε χρήση μεταβλητής ακολουθεί πάντα τον ορισμό της
Γιατί SSA; Αποτελεί μια κοινή βάση για την επίλυση πολλών κλασικών προβλημάτων ανάλυσης ροής δεδομένων Ενσωματώνει ροή ελέγχου και ροή δεδομένων στην ίδια δομή Η μορφή SSA κατασκευάζεται και συντηρείται εύκολα Πολλοί αλγόριθμοι ανάλυσης ροής δεδομένων έχουν χαμηλότερη πολυπλοκότητα μεssaαπόό,τιμεast
Στατικός Ορισμός Μεταβλητών Κάθε μεταβλητή έχει μόνο έναν ορισμό (δηλαδή ανάθεση τιμής) στον κώδικα Οορισμόςαυτόςμπορείναβρίσκεταισε βρόχο, κι έτσι να εκτελείται πολλές φορές Άρα στην ουσία μια μεταβλητή ορίζεται δυναμικά πολλές φορές
Ορισμοί και Μονοπάτια Ελέγχου Κάθεμεταβλητήπρέπειναέχειέναμοναδικό ορισμό σε κάθε σημείο χρήσης της(reaching definition) Όταν δύο μονοπάτια συναντώνται, εισάγεται μια ειδική συνάρτηση φ(), η οποία συνδέει τους διαφορετικούς ορισμούς μιας μεταβλητής στον ένα μοναδικόορισμόπουαπαιτείημορφήssa
Παράδειγμα: CFG a = a = = a+5 = a+5 a = Πολλαπλοί Ορισµοί Χρήσης = a+5 Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράδειγμα: Μορφή SSA a 1 = a 3 = = a 1 +5 a 4 = φ(a 1,a 3 ) a 2 = = a 2 +5 = a 4 +5 Μοναδικός Ορισµός Χρήσης Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Συναρτήσεις φ() Ένα όρισμα μιας συνάρτησης φ() αποτελεί τον ορισμό χρήσης από το αντίστοιχο μονοπάτι Η σειρά των ορισμάτων μιας συνάρτησης φ() είναι σημαντική για να ξέρουμε από ποιο μονοπάτι προέρχεται ο ορισμός Στην ουσία μια συνάρτηση φ() επιλέγει ένα από τα ορίσματά της, ανάλογα με το μονοπάτι που οδήγησε σε αυτήν
Αποδοτικότητα της Μορφής SSA Use-Def chains: Πολλές χρήσεις (uses) προς πολλούς ορισμούς (defs) Κόστος αναπαράστασης Δυσκολία διαχείρισης a = a a a = a a = Peking University
Αποδοτικότητα της Μορφής SSA Το πλήθος των ακμών μειώθηκεαπό9σε6 Η συνάρτηση φ() απότελεί ορισμό (def) και τα ορίσματά της απότελούν χρήσεις(uses) Πολλές χρήσεις προς έναν ορισμό Κάθε ορισμός είναι α- ποκλειστικός για όλες τις χρήσεις του a = a a = a = φ(a,a,a) a a a = Peking University
Μετονομασία Τιμών Η αναπαράσταση των ακμών usedef δεν είναι πια απαραίτητη a 1 = a 2 = a 3 = a 4 = φ(a 1,a 2,a 3 ) a 4 a 4 a 4 Peking University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Μορφή SSA και Σημεία Σύγκλισης Ροής Ελέγχου ΕίναιαυτόςοκώδικαςσεμορφήSSA; Όχι, υπάρχουν δύο ορισμοί για τη χρήση του a στο μπλοκ B4 (στα μπλοκb1καιb3) Πώς μετατρέπεται ο κώδικας σε μορφή SSA; Δημιουργούμε δύο εκδοχές για το a, μίαστοb1καιμίαστοb3 B3 B1 B2 b M[x] a 0 a b B4 if b<4 c a + b Peking University
Μορφή SSA και Σημεία Σύγκλισης Ροής Ελέγχου Ποια εκδοχή του a χρησιμοποιούμε τώραστομπλοκb4; Εισάγουμε τη συνάρτηση φ() η οποία κατά κάποιον τρόπο ξέρει από ποιο μονοπάτι φτάσαμε στο μπλοκ B4: a2,αν φτάσαμε από το Β3 φ a2,a1 a1,αν φτάσαμε από το Β2 B3 B1 B2 a2 b B4 b M[x] a1 0 if b<4 c a? + b Peking University
Μορφή SSA και Σημεία Σύγκλισης Ροής Ελέγχου Ποια εκδοχή του a χρησιμοποιούμε τώραστομπλοκb4; Εισάγουμε τη συνάρτηση φ() η οποία κατά κάποιον τρόπο ξέρει από ποιο μονοπάτι φτάσαμε στο μπλοκ B4: a2,αν φτάσαμε από το Β3 φ a2,a1 a1,αν φτάσαμε από το Β2 B3 B1 a2 b B4 B2 b M[x] a1 0 if b<4 a3 φ(a2,a1) c a3 + b Peking University
Παράδειγμα Βρόχου a 0 b a+1 c c+b a b*2 if a < N return Σημείωση: Μόνο τα a και c έχουν χρήση στο σώμα του βρόχου πριν το νέο ορισμό τους. Το b ορίζεται εκ νέου στην αρχή του σώματος του βρόχου! a1 0 a3 φ(a1,a2) b1 φ(b0,b2) c2 φ(c0,c1) b2 a3+1 c1 c2+b2 a2 b2*2 if a2 < N return Peking University Η φ(b0,b2) δε χρειάζεται, αφού δεν υπάρχει χρήση του b0. Όμως η φάση εισαγωγής των συναρτήσεων φ() αυτό δεν το γνωρίζει. Άχρηστες συναρτήσεις αφαιρούνται από τη φάση απαλοιφής άχρηστου κώδικα.
Υλοποίηση Συναρτήσεων φ() Πώς υλοποιούμε μια συνάρτηση φ() που γνωρίζει ποιο μονοπάτι ελέγχου ακολουθείται; Απάντηση 1: Δεν την υλοποιούμε!! Η συνάρτηση φ() χρησιμοποιείται μόνο για να συνδέσει χρήσεις με ορισμούς κατά τη φάση της βελτιστοποίησης, αλλά δεν υλοποιείται. Απάντηση 2: Αν πρέπει να εκτελέσουμε μια συνάρτηση φ(), μπορούμε να την υλοποιήσουμε με εισαγωγή εντολώνmoveσεόλαταμονοπάτια.
Εισαγωγή Συναρτήσεων φ() Μπορούμε να εισάγουμε μια συνάρτηση φ() για κάθε μεταβλητή σε κάθε σημείο σύγκλισης του γράφου ροής ελέγχου (CFG). Αλλά αυτό δεν είναι και η καλύτερη ιδέα. Ποια θα πρέπει να είναι τα κριτήριά μας για να εισάγουμε μια συνάρτηση φ() για κάποια μεταβλητή a σε κάποιονκόμβοzτουcfg; Διαισθητικά, θα πρέπει να εισάγουμε μια συνάρτηση φ() εάν υπάρχουν δύο ορισμοί της μεταβλητής a που φτάνουν στον κόμβο z μέσα από διαφορετικά μονοπάτια.
Η Απλοϊκή Μέθοδος Απλή εισαγωγή μιας συνάρτησης φ() σε κάθε σημείο σύγκλισης του CFG Αλλά αυτό δεν είναι αποδοτικό εισάγουμε υπερβολικά πολλές άχρηστες συναρτήσειςφ()! Ποιος είναι καλός αλγόριθμος εισαγωγής μόνο των χρήσιμων συναρτήσεων φ();
Κριτήριο Σύγκλισης Μονοπατιών Εισαγωγή μιας συνάρτησης φ() για μια μεταβλητή a σε κάποιον κόμβο z, εάν είναι αληθείς όλες οι παρακάτω συνθήκες: 1. Υπάρχει μπλοκ x όπου ορίζεται η μεταβλητή a 2. Υπάρχεικαιάλλομπλοκy xπουορίζειτηνa 3. ΥπάρχειμηκενόμονοπάτιPxzαπότοxστοz 4. ΥπάρχειμηκενόμονοπάτιPyzαπότοyστοz 5. ΤαμονοπάτιαPxzκαιPyzδενέχουνκοινούςκόμβουςπέρα απότονz 6. ΟκόμβοςzδενεμφανίζεταικαισταδύομονοπάτιαPxzκαι Pyzπριντοτέλοςτους,αλλάμπορείναεμφανίζεταισεένα απόταδύο. Ο κόμβος έναρξης θεωρείται ότι περιέχει ορισμό για κάθε μεταβλητή.
Επαναληπτικό Κριτήριο Σύγκλισης Μονοπατιών Εφόσον μια συνάρτηση φ() αποτελεί και αυτή ορισμό της μεταβλητής a, το κριτήριο σύγκλισης θα πρέπει να εφαρμόζεται επαναληπτικά: όσο υπάρχουν κόμβοι x, y, z που ικανοποιούν τις συνθήκες 1-6 και ο z δεν περιέχει συνάρτηση φ()γιατημεταβλητήa επανάλαβεεισαγωγήa φ(a,a,,a)στονκόμβοz Ο αλγόριθμος είναι υπερβολικά ακριβός, εφόσον απαιτεί την εξέταση κάθε τριάδας κόμβων x, y, z και κάθε μονοπατιούαπότονxστονy. Μπορούμε καλύτερα;
Η Ιδέα των Συνόρων Κυριαρχίας ιαισθητικά: bbn a bb1 a Μπλοκ κυριαρχούµενα από το bb1 Σύνορο µεταξύ κυριαρχίας και µη-κυριαρχίας (Σύνορο Κυριαρχίας) Peking University
Σύνορα Κυριαρχίας (Dominance Frontiers) Το σύνορο κυριαρχίας DF(x) ενός κόμβου x είναι το σύνολο όλων των κόμβων z τέτοιων ώστε το x κυριαρχεί κάποιον πρόγονο του z, χωρίς αυστηρή κυριαρχίατουz. Εάν το x κυριαρχεί το y και x y, τότε λέμε ότιτοx κυριαρχείαυστηρά τοy
Υπολογισμός του Συνόρου Κυριαρχίας ιαισθητικά: Ποιο είναι το σύνορο κυριαρχίας του κόµβου 5; 1. Εύρεση περιοχής κυριαρχίαςτουκόµβου 5: {5, 6, 7, 8} 2. Εύρεση προορισµών των ακµών που φεύγουν από την περιοχή κυριαρχίας τουκόµβου 5 Προορισµοί που αποτελούν το σύνορο κυριαρχίας του κόµβου 5: DF(5) = { 4, 5, 12, 13} Γιατί ο κόµβος 5 βρίσκεται στο DF(5); 1 2 9 5 3 4 6 7 10 11 8 13 12 Peking University
Αλγόριθμος Μετατροπής σε SSA Σε γενικές γραμμές, η μετατροπή ενός κώδικασεμορφήssaγίνεταισετρίαβήματα: Βήμα 1. Ξεκινώντας από το CFG, βρίσκουμε τα σύνορα κυριαρχίας όλων των κόμβων. Βήμα 2. Χρησιμοποιώντας τα σύνορα κυριαρχίας, καθορίζουμε τις θέσεις όπου θα εισαχθούν συναρτήσεις φ() για κάθε μεταβλητή του προγράμματος. Βήμα 3. Μετονομάζουμε τις μεταβλητές, αντικαθιστώντας κάθε αναφορά μιας μεταβλητής V με την κατάλληλη δεικτοδοτούμενη αναφορά μιας νέαςμεταβλητήςv i
Γράφος Ροής Ελέγχου (Control Flow Graph) CFG = (V, E), όπου V οι κόμβοι και Ε οι ακμές Το σύνολο V περιέχει και τους ειδικούς κόμβους START και END: Κάθε κόμβος είναι προσβάσιμος από τον κόμβο START Ο κόμβος END είναι προσβάσιμος από κάθε κόμβο του CFG. ΟκόμβοςSTARTδενέχειπρογόνους ΟκόμβοςENDδενέχειαπογόνους
Δέντρο Κυριαρχίας (Dominator Tree) Αν ο κόμβος X υπάρχει σε κάθε μονοπάτι μεταξύ START και Y, τότε ο X κυριαρχεί τονy. Η σχέση κυριαρχίας είναι ανακλαστική και μεταβατική. idom(y): άμεσος κυρίαρχος τουy Δέντρο Κυριαρχίας ΟκόμβοςSTARTαποτελείτηρίζα Κάθε κόμβος Υ εκτός του START έχει γονέα τον κόμβο idom(y)
Παράδειγμα Δέντρου Κυριαρχίας START START a b c d CFG END DT Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράδειγμα Δέντρου Κυριαρχίας START START a a b c d CFG END DT Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράδειγμα Δέντρου Κυριαρχίας START START a a b c b c d CFG END DT Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράδειγμα Δέντρου Κυριαρχίας START START a a b c b c d d CFG END DT Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράδειγμα Δέντρου Κυριαρχίας START START a a END b c b c d d CFG END DT Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράδειγμα Συνόρων Κυριαρχίας START START a a END b c b c d DT d CFG END DF(c) =? DF(a) =? Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράδειγμα Συνόρων Κυριαρχίας START START a a END b c b c d DT d CFG END DF(c) = {d} DF(a) =? Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παράδειγμα Συνόρων Κυριαρχίας START START a a END b c b c d DT d CFG END DF(c) = {d} DF(a) = {END} Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Υπολογισμός Συνόρων Κυριαρχίας Σύνορο κυριαρχίας DF(X) του κόμβου X Σχέση 1: DF(X) ={Y P Pred(Y): X domp and X!sdomY } Σχέση 2: DF(X) = DF local (X) Z Παιδιά(X) DF up (Z) DF local (X) = {Y Παιδιά(X) X!sdomY} = {Y Παιδιά(X) idom(y) X} DF up (Z) = {Y DF(Z) idom(z)!sdomy}
Υπολογισμός Συνόρων Κυριαρχίας Γιατί οι προηγούμενες σχέσεις 1 και 2 είναι ισοδύναμες; Είναιεύκολοναπάμεαπότησχέση1στησχέση2. Άρα πρέπει να δείξουμε ότι η σχέση 2 βρίσκει κάθε κόμβο του DF(X). Έστω Y DF(X) και U->Y ακμή τέτοια, ώστεοχκυριαρχεί τον U αλλά δεν κυριαρχεί αυστηρά τονy. ΑνU=X,τότεY DF local (X) ΑνU X,τότευπάρχειμονοπάτιμεταξύΧκαιUστοΔέντρο Κυριαρχίας κάτι που σημαίνει ότι υπάρχει παιδί Ζ του Χ το οποίονακυριαρχείτονu. ΟZ δενκυριαρχείαυστηράτονυ, επειδήοχδενκυριαρχείαυστηράτονy.άραy DF up (Z).
Συναρτήσεις φ() και Σύνορο Κυριαρχίας Διαισθητικά καταλαβαίνουμε ότι η σχέση Y DF(X) σημαίνει: ΟY έχει πολλαπλούς προγόνους Ο X κυριαρχεί κάποιον από αυτούς, έστω τον U, οπότε ο U κληρονομεί όλες τις σχέσεις του κόμβου X ΟιορισμοίχρήσηςτουΥπροέρχονταιαπότον U και άλλους προγόνους Άρα ο Y είναι ακριβώς μια θέση όπου πρέπει να μπει συνάρτηση φ()
Εισαγωγή Συναρτήσεων φ() Αλγόριθμος: Για κάθε μεταβλητή V Βάλε σε μια λίστα εργασίας W όλους τους κόμβουςμεανάθεσηστηv ΌσουπάρχειXστηλίσταWεπανάλαβε ΓιακάθεκόμβοYστοDF(X)κάνε Εάνδενυπάρχειφ()στονYτότε Πρόσθεσε(V=φ(V,,V))στονY ΕάνοYδενέχειξανασυναντηθεί,βάλτονστηλίσταW.
Μετονομασία Μεταβλητών Αναδρομικά για κάθε μεταβλητή, ξεκινώντας με τον κόμβο START, χρησιμοποιώντας στοίβα ΓιατονκόμβοX Γιακάθεανάθεση(V= )τουx Μετονόμασε τις χρήσεις της μεταβλητής V με το όνομα στην κορυφή της στοίβας ΒάλετονέοόνομαV i στηστοίβα i=i+1 Μετονόμασε τα ορίσματα της συνάρτησης φ() μέσω τωνακμώντουcfg Εφάρμοσε αναδρομικά για όλα τα παιδιά του Χ στο δέντρο κυριαρχίας Γιακάθεανάθεση(V= )τουx ΒγάλετοV i απότηστοίβα
Παράδειγμα Μετονομασίας a 1 = TOS a= a 1 +5 Rename a = a= φ(a 1,a) a+5 a+5 Stanford University Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
Παραγωγή Κώδικα από SSA Απλοϊκή λύση: Μια συνάρτηση φ() με k ορίσματα, που βρίσκεται στην αρχή ενός κόμβου Χ, μπορεί να αντικατασταθεί α- πό k απλές αναθέσεις, στο τέλος κάθε πατρικούκόμβουτουχστοcfg. Πρόβλημα αποδοτικότητας κώδικα;
Παραγωγή Κώδικα από SSA Επιλογή 1: χρωματισμός Υπολόγισε τις διάρκειες ζωής των μεταβλητών και δώσε ένα μοναδικό όνομα μεταβλητής για κάθε διάρκεια ζωής Όπως κάνουμε στη δέσμευση καταχωρητών! Επιλογή 2: απλή διαγραφή όλων των συναρτήσεων φ() Οι βελτιστοποιήσεις με βάση τη μορφή SSA πρέπει να μη δημιουργούν επικαλυπτόμενες διάρκειες ζωής
Απαλοιφή Άχρηστου Κώδικα Για ποιο λόγο ένας κώδικας είναι άχρηστος; Ανάθεση χωρίς επόμενη χρήση Μέθοδος απαλοιφής άχρηστου κώδικα Σημείωσε όλες τις εντολές ως άχρηστες Σημείωσε κάποιες εντολές ως χρήσιμες (ζωντανές) με βάση κάποια κριτήρια Έτσι όμως δημιουργείς και άλλες χρήσιμες εντολές Πραγματικά άχρηστος κώδικας είναι εκείνος που έμεινε σημειωμένος ως άχρηστος Peking University
Παράδειγμα Χρήσης SSA Διαισθητική απαλοιφή άχρηστου κώδικα (dead code elimination) Εφόσον για κάθε μεταβλητή υπάρχει μόνο ένας ορισμός, αν η λίστα χρήσεων της μεταβλητής είναι κενή, τότε ο ορισμός είναι άχρηστος Ότανμιαεντολήv xopyαπαλείφεταιεπειδή δεν υπάρχει χρήση της v, τότε η εντολή πρέπει να απαλειφτεί και από τις χρήσεις των x και y, κάτι που μπορεί να αχρηστεύσει και τους ορισμούς αυτών των μεταβλητών, κοκ
Παράδειγμα Χρήσης SSA Διαισθητική διάδοση σταθερής τιμής (constant propagation) Αν υπάρχει εντολή v c, όπου c είναι σταθερά, τότε όλες οι χρήσεις της v μπορούν να αντικατασταθούν με c Μιαεντολήτηςμορφήςv φ(c1,c2,,cn) όπου όλα τα ci είναι ταυτόσημα μπορεί να απλοποιηθείσεv c. Χρησιμοποιώντας αλγόριθμο με λίστα εργασίας σε ένα πρόγραμμα που βρίσκεται σε μορφή SSA, υλοποιούμε διάδοση σταθεράς σε γραμμικό χρόνο
Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 B3 j i k k+1 B7 B2 B1 if j<20 i 1 j 1 k 0 if k<100 j k k k+2 return j B6 B4 Peking University
Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 B3 j i k3 k+1 B7 B1 B2 if j<20 i 1 j 1 k1 0 if k<100 return j j k k5 k+2 B6 B4
Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 j i k3 k+1 B7 B3 B1 B2 if j<20 i 1 j 1 k1 0 if k<100 return j j k k5 k+2 k4 φ(k3,k5) B6 B4
Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 j i k3 k+1 B7 B3 B2 B1 if j<20 i 1 j 1 k1 0 k2 φ(k4,k1) if k<100 return j j k k5 k+2 k4 φ(k3,k5) B6 B4
Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 j i k3 k2+1 B7 B3 B2 B1 if j<20 i 1 j 1 k1 0 k2 φ(k4,k1) if k2<100 return j j k2 k5 k2+2 k4 φ(k3,k5) B6 B4
Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 j3 i1 k3 k2+1 B7 B3 B2 if j2<20 B1 j4 φ(j3,j5) k4 φ(k3,k5) i1 1 j1 1 k1 0 j2 φ(j4,j1) k2 φ(k4,k1) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4
B5 j3 i1 k3 k2+1 B7 B3 Διάδοση Σταθεράς B2 if j2<20 B1 j4 φ(j3,j5) k4 φ(k3,k5) i1 1 j1 1 k1 0 j2 φ(j4,j1) k2 φ(k4,k1) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4 B5 j3 1 k3 k2+1 B7 B3 B2 if j2<20 B1 j4 φ(j3,j5) k4 φ(k3,k5) i1 1 j1 1 k1 0 j2 φ(j4, 1) k2 φ(k4,0) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4
B5 j3 1 k3 k2+1 B7 B3 Απαλοιφή Άχρηστου Κώδικα B2 if j2<20 B1 j4 φ(j3,j5) k4 φ(k3,k5) i1 1 j1 1 k1 0 j2 φ(j4, 1) k2 φ(k4,0) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4 B5 B3 j3 1 k3 k2+1 B7 B2 if j2<20 j4 φ(j3,j5) k4 φ(k3,k5) j2 φ(j4,1) k2 φ(k4,0) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4
B5 j3 1 k3 k2+1 B7 B3 Συνέχεια B2 if j2<20 j4 φ(j3,j5) k4 φ(k3,k5) j2 φ(j4,1) k2 φ(k4,0) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4 B5 B3 j3 1 k3 k2+1 B7 B2 if j2<20 j4 φ(1,j5) k4 φ(k3,k5) j2 φ(j4,1) k2 φ(k4,0) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4
B5 Κι Άλλη Βελτιστοποίηση k3 k2+1 B7 B3 B2 if j2<20 j4 φ(1,j5) k4 φ(k3,k5) j2 φ(j4,1) k2 φ(k4,0) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4 Μπορούµε να δούµε ότι το µπλοκ Β6 δεν εκτελείται ποτέ! Πώς µπορούµε να το καταλάβουµε αυτό και να απλοποιήσουµε τον κώδικα; Χρησιµοποιώντας τη διάδοση σταθεράς υπό συνθήκη, η οποία βρίσκει ότι το j2 δεν αλλάζει τιµή και έτσι επιτρέπει περαιτέρω απαλοιφή άχρηστου κώδικα
k3 k2+1 B7 Περαιτέρω Απαλοιφή Άχρηστου Κώδικα B3 B2 if j2<20 j4 φ(1,j5) k4 φ(k3,k5) j2 φ(j4,1) k2 φ(k4,0) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4 B5 k3 k2+1 B7 B2 j4 φ(1) k4 φ(k3) j2 φ(j4,1) k2 φ(k4,0) if k2<100 return j2 B4
B5 k3 k2+1 B7 Απαλοιφή Συναρτήσεων φ B2 j4 φ(1) k4 φ(k3) j2 φ(j4,1) k2 φ(k4,0) if k2<100 return B4 j2 B4 B5 k3 k2+1 B7 B2 j4 1 k4 k3 j2 φ(j4,1) k2 φ(k4,0) if k2<100 return j2 B4
B5 k3 k2+1 B7 Διάδοση Σταθεράς και Αντιγράφου B2 j4 1 k4 k3 j2 φ(j4,1) k2 φ(k4,0) if k2<100 return j2 B4 B5 k3 k2+1 B7 B2 j4 1 k4 k3 j2 φ(1,1) k2 φ(k3,0) if k2<100 return j2 B4
B5 k3 k2+1 B7 Κι Άλλος Άχρηστος Κώδικας B2 j4 1 k4 k3 j2 φ(1,1) k2 φ(k3,0) if k2<100 return j2 B4 B5 k3 k2+1 B2 j2 φ(1,1) k2 φ(k3,0) if k2<100 return j2 B4
B5 k3 k2+1 Κι Άλλη Απλοποίηση Συνάρτησης φ B2 j2 φ(1,1) k2 φ(k3,0) if k2<100 return j2 B4 B5 k3 k2+1 B2 j2 1 k2 φ(k3,0) if k2<100 return j2 B4
B5 Κι Άλλη Διάδοση Σταθεράς B2 j2 1 k2 φ(k3,0) if k2<100 B2 j2 1 k2 φ(k3,0) if k2<100 return j2 B4 return 1 k3 k2+1 B5 k3 k2+1 B4 Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών
B5 Τελικός Κώδικας! B2 j2 1 k2 φ(k3,0) if k2<100 return 1 B4 return 1 B4 k3 k2+1 Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών