Dominatorgrenze

debach
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 18. Mai 2007 15:59
Kontaktdaten:

Dominatorgrenze

Beitrag von debach » 29. Jul 2010 13:57

Der in der VL angegebene Algorithmus zur Bestimmung von Dominatorgrenzen funktioniert nicht korrekt bei while-Konstrukten. Die Dominatorgrenze eines While-Knotens enthält den While-Knoten selbst. Denn der While-Head w hat einen Vorgänger q — den While-Body —, den der While-Head x dominiert, aber x dominiert nicht strikt w (x = w). Also ist w in DF(x). Den Fall x=w schließt der Algorithmus aber in der inneren Schleife aus: runner != n.
Außerdem, wenn der ganze CFG nur aus einem While-Konstrukt besteht, hat der While-Head nur einen Vorgänger und die if-Bedingung feuert nicht.

Code: Alles auswählen

foreach node n in CFG do
  if |preds(n)| > 1 then
    foreach node p in preds(n) do
      runner := p
      while runner != IDOM(n) && runner != n do
        DF(runner) += {n}
        runner := IDOM(runner)

Zurück zu „Archiv“