Skip to content
Abschluss
Offene Themen
Statische Code-Analyse
- Beispiel: Lesen uninitialisierter Variablen
c ist sicher nicht initialisiert, b abhängig vom if
- Evtl. ist aber die
if-Bedingung immer gegeben. Problem ist nicht absolut entscheidbar
- Konservativ behandeln: Programmpfade analysieren, die möglich sind
- Nächstes Beispiel:
c ist sicher = 3
- Wieder Pfade anschauen. Wenn eine Variable auf allen Pfaden den gleichen Wert hat, ist dieser Konstant -> optimierbar
- Mit
while ist c nicht mehr konstant
- Pfad schliesst sich wieder, es muss durchiteriert werden, bis keine Änderungen mehr passieren
Single Static Assignment
- Bei Wiederverwendung von Variablen
- Optimierung: Jede Variable wird genau einmal zugewiesen (Variablen "indexieren")
- Problematisch bei Verzweigungen
- Die -Funktion entscheidet, welcher Pfad genommen wird
- Wenn einmal SSA durchgeführt ist, kann man einfach "Dead Code" erkennen, wenn Variablen nie gelesen werden
Common Subexpression Elimination
- Wiederholt ausgewertete Teilausdrücke identifizieren
- Diese in eine temp-Variable / oder besser Register vorberechnen
- Basiert ebenfalls auf SSA
Partial Redundancy Elimination
- Doppelter / Redundanter Code erkennen
- In allen Codepfaden den Code duplizieren, in allen Fällen wird dann der Ausdruck nur einmal ausgewertet
Peephole Optimization
- Ein "Fenster" von z.B. 3 Instruktion über den IL-Code laufen lassen
- Optimierungen innerhalb dieses "Gucklochs"
- Konstante Expressions können so direkt ausgewertet werten
- Laufzeit ist voraussehbar anhand der Grösse des Peepholes