Region based optimization may be accomplished by creating dependence graphs
for each block and then incrementally computing a single dependence graph
for the region. First dependence DAGs are created for each block in the
region. This includes defining incoming and outgoing dangling edges for
each block. Each dependence DAG is then linked as a control flow graph.
Examining of each incoming dangling edge within each block of the region
then takes place, with the process traversing each path along the control
flow graph in reverse, attempting to match each incoming dangling edge
with a corresponding incoming or outgoing dangling edge, stopping only if
an outgoing match is found, the same block is examined twice, or the top
of the region is found. A similar process takes place for each outgoing
dangling edge, traversing each path along the control flow path forward,
attempting to match each outgoing dangling edge with a corresponding
incoming dangling edge, stopping only if a match is found, the same block
is examined twice, or the bottom of the region is found. The region may
then be reduced to a single block with incoming dangling edges being any
unmatched incoming dangling edges at the top of the region and outgoing
dangling edges being any unmatched outgoing dangling edges at the bottom
of the region. Optimization may occur during or after this reduction step
to improve performance in the program. Nested loops may be handled by
building the dependence graph for the inner most loop first and treating
it like a dependence DAG for a block when processing the outer loops.
L'ottimizzazione basata regione può essere compiuta generando i grafici di dipendenza per ogni blocco ed allora incrementalmente computando un singolo grafico di dipendenza per la regione. La prima dipendenza DAGs è generata per ogni blocco nella regione. Ciò include la definizione dei bordi dangling ricevuti ed uscenti per ogni blocco. Ogni dipendenza DAG allora è collegata come un grafico di flusso di controllo. Esaminando di ogni bordo dangling ricevuto all'interno di ogni blocco della regione allora avviene, con il processo che attraversa ogni percorso lungo il grafico di flusso di controllo al contrario, tentante di abbinare ogni bordo dangling ricevuto con corrispondere bordo dangling ricevuto o uscente, arrestantesi soltanto se un fiammifero uscente è trovato, lo stesso blocco è esaminato due volte, o la parte superiore della regione è trovata. Un processo simile avviene per ogni bordo dangling uscente, attraversando ogni percorso lungo il percorso di flusso di controllo in avanti, tentando di abbinare ogni bordo dangling uscente con un bordo dangling ricevuto corrispondente, arrestantesi soltanto se un fiammifero è trovato, lo stesso blocco è esaminato due volte, o la parte inferiore della regione è trovata. La regione può allora essere ridotta ad un singolo blocco con i bordi dangling ricevuti che sono tutti i bordi dangling ricevuti ineguagliati alla parte superiore della regione e bordi dangling uscenti che sono qualunque bordi dangling uscenti ineguagliati alla parte inferiore della regione. L'ottimizzazione può accadere durante o dopo questo punto di riduzione per migliorare le prestazioni nel programma. I cicli annidati possono essere maneggiati sviluppando il grafico di dipendenza per l'interno la maggior parte del ciclo in primo luogo e trattandolo gradisca una dipendenza DAG per un blocco quando procedono i cicli esterni.