====== Übersetzerbau 2 2017-08-09 ====== **Fach:** Optimierungen in Übersetzern **Prüfer:** Prof. Philippsen **Beisitzer:** Marius Kamp ===== Fragen ===== - Welche wichtige Datenstruktur haben wir denn fuer Optimierungen verwendet? ~> KFG - Was ist ein KFG, Basisbloecke, wie erstellt man ihn? - Was kann man damit machen ~> Dominanz bestimmen - Was ist Dominanz? Wie kann man sie bestimmen? ~> iterativer Fixpunktalgorithmus, Lengauer-Tarjan - Wie funktioniert iterativer Fixpunktalgorithmus? - Wofuer wird Dominanz benoetigt? ~> Kontrollflussabhaengigkeit - Was ist Dominanzgrenze, wie bestimmt man sie? class C { //... } void foo(C p) { C c = new C(); nullptrcheck(c); nullptrcheck(p); c.x = p.x // ... } - Wie kann man unnoetige Nullptrchecks erkennen? ~> Datenflussanalyse - Bitvektorbelegung, Gen-, Kill-Mengen, Konfluenzoperator angeben. - Was hatten wir noch an Werkzeug fuer Datenflussanalyse? ~> SSA - Was ist SSA? - Wie in SSA transformieren? ~? Wertnummerierung (Click)/Dominanzgrenzen (Cytron) - Click angewandt. - Wie aus SSA zurueck? ~> CSSA waere nett, Transformationen machen aber iA Lebensspannen kaputt, also Temporaervariablen einfuehren, drei Zuweisungen. - Was ist schleifeninvarianter Code? - Ist bei diesem Codestueck die Zuweisung invariant? ~> abhaenging von p ~> Aliasanalyse - Welche benutzen wir? ~> interprozedural, also Steensgard - Steensgard angewandt. - Was sind Induktionsvariablen? Welche Arten gibt es? - Transformationsschablone auf gegebenes Codestueck angewandt. - Schleifengrenze angepasst; illegal bei Ueberlauf.