Optimierung in Übersetzern: Grundblöcke

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Optimierung in Übersetzern: Grundblöcke
Hallo erstmal! Ich bin in UE2 und habe Compilerbau vorher nicht belegt gehabt, es könnte sich also um eine doofe Frage handeln. :smiley: (Ich bin im Master und hab schon an meiner vorherigen Hochschule ein ähnliches Modul gehabt)
Ist eigentlich ein “call”-Befehl ein Grundblock-Ende?
Ich würde sagen ist es ja ein Sprung zu einer anderen Stelle im Programm.
Andererseits “springt” das Programm ja immer wieder zum Befehl hinter dem Call zurück.

In Software Reverse Engineering wurde ein Grundblock nicht von einem Call unterbrochen.

Danke und viele Grüße,
Jonathan.


Hi Jonathan,

nein, ein Funktionsaufruf sorgt alleine nicht für den Anfang oder das Ende eines maximalen Grundblocks.

Dies hat verschiedene Gründe: Zum einen handelt es sich bei der Erstellung des Kontrollflussgraphen um eine intraprozedurale Analyse, das heißt der KFG wird für jede Funktion einzeln erstellt. Zum anderen hätte der Grundblock vor dem Funktionsaufruf nur einen Nachfolger bzw. der Grundblock nach dem Funktionsaufruf nur einen Vorgänger, was der Definition eines maximalen Grundblocks widerspricht. Dies würde auch dazu führen, dass verschiedene intraprozedurale Optimierungen bzw. deren Algorithmen auf die aufgerufenen Funktionen nicht mehr möglich sind, da der Entry-Knoten auf einmal einen Vorgänger und der Exit-Knoten einen Nachfolger hätte.

Bei nachfolgenden Optimierungen muss man dann aber selbstverständlich auf Funktionsaufrufe aufpassen und wenn nötig konservative Annahmen treffen um keine illegalen Optimierungen durchzuführen.
Beispiel: Das Herausziehen von Schleifeninvariantem Code. Wenn man nicht weiß, ob eine aufgerufene Funktion in einer Schleife Seiteneffekte hat, muss man dies konservativ annehmen und kann den Funktionsaufruf nicht aus der Schleife ziehen.

PS: Für inhaltliche Fragen am Besten das Forum im StudOn-Kurs verwenden: https://www.studon.fau.de/frm2924933.html

Viele Grüße,
Tom