2012-03-14 12 views

risposta

3

Non credo, dal momento che non esiste una cosa come un "terminatore BB": molto bene potrebbero esserci più BB terminati da un ritorno.

+1

Mi potete dare un esempio di una funzione con più di un terminatore BBS? Anche se ci sono più ritorni, ci dovrebbe essere un BB con un phi per "raccogliere" tutti i BB di ritorno, giusto? – dalibocai

+0

No, in realtà c'è anche un passaggio chiamato UnifyFunctionExitNodes che fa esattamente quello che dice il suo nome, cioè sbarazzarsi di più uscite da una funzione – CAFxX

+0

OK. Io vedo. Grazie! – dalibocai

0

No. Potrebbero esserci più blocchi di base di terminazione di una funzione, ad esempio una funzione contenente più istruzioni di reso. ogni blocco di base che contiene un'istruzione di ritorno dalla funzione verrà quindi chiamato blocco di terminazione o blocco di base del terminatore. Per rilevare tutti i blocchi di base che sono terminatore blocchi di base (vale a dire da una scheda contenente ritorno) effettuare le seguenti operazioni:

runOnFunction { 
    for BB in F: 
     for I in BB: 
      if (ReturnInst *RI = dyn_cast<ReturnInst> I) 
      BB is terminator Basic Block 
      endif 
     endfor 
    endfor 
} 
Problemi correlati