2012-01-27 10 views
6

Sto cercando di capire con precisione la nozione di un grafico di dipendenza del controllo. Se ho il seguente grafo di controllo (in DOT notazione):Un grafico di dipendenza del controllo può avere cicli?

graph g { 
1 -> 2; 
2 -> 3; 
3 -> 2; 
2 -> 4; 
1 -> 4 
} 

Ha un nodo univoco voce (1) ed un nodo di uscita unico (4), ed un anello di 2 -> 3 -> 2.

La mia domanda è: il grafico di dipendenza del controllo per questo CFG contiene un margine di loop da 2 a se stesso?

Allen & "Compilatori ottimizzanti per architetture moderne" di Kennedy ha un algoritmo che produce un tale margine di loop. Tuttavia, l'algoritmo di "Compiler design & implementazione" di Muchnick per la dipendenza da controllo non produce tale vantaggio. Inoltre, non sono riuscito a trovare alcun esempio nella letteratura in cui un CDG è disegnato con un tale margine di loop. Tendo a credere che non ci sia un tale margine, ma secondo la definizione formale di dipendenza da controllo e secondo l'algoritmo di Allen & Kennedy, dovrebbe!

Se potete per favore mi punto ad un esempio in cui v'è una tale ciclo in un CDG (preferibilmente in un articolo peer-reviewed, o dispense di qualche professore, ecc), o se si può discutere l'algoritmo di perché Allen & Kennedy dovrebbe essere sbagliato, sarei felice di sapere.

+0

L'utilità di tale grafico di dipendenza determina come ordinare le operazioni, giusto? In questo senso, non è utile sapere che un elemento dipende da se stesso. Puoi disegnare i loop se vuoi, ma ciò che è veramente importante sono tutti gli altri lati. – mitchus

+0

Sì, penso che mi aspettavo qualche "definizione canonica" che potrebbe essere usata come un oracolo per testare più implementazioni, ma è vero che entrambe le versioni sono equivalenti per tutti gli scopi pratici ... grazie! – anol

+0

@mitchus È necessario spostare il commento su una risposta in modo che possa essere accettato come risposta. –

risposta

2

Secondo Ferrante 1987, possono esistere loop di controllo-dipendenza. Nel caso 2 a pagina 325, l'autore specifica che

Tutti i nodi dell'albero post-Dominator sul percorso da A a B, tra cui A e B, dovrebbe essere fatto il controllo dipendente da A. (Questo caso acquisisce dipendenza dal ciclo.)

Pertanto, in questo caso, sul nodo A ci sarebbe un ciclo.

+0

Hai ragione, ho accettato la risposta di @mitchus, ma la tua è più precisa. Trovo ancora abbastanza pertinente il commento di Mitchus. – anol

3

L'utilità di tale grafico di dipendenza determina come ordinare le operazioni, giusto? In questo senso, non è utile sapere che un elemento dipende da se stesso. Puoi disegnare i loop se vuoi, ma ciò che è veramente importante sono tutti gli altri lati.