2012-03-14 9 views

Respuesta

3

No creo, ya que no existe un "terminador BB": muy bien puede haber múltiples BB terminados por una devolución.

+1

¿Me puede dar un ejemplo de una función con más de un terminador de BBS? Incluso si hay retornos múltiples, debería haber un BB con una phi para "recoger" todas las BB de retorno, ¿no? – dalibocai

+0

No, de hecho incluso hay un pase llamado UnifyFunctionExitNodes que hace exactamente lo que su nombre dice, es decir, deshacerse de múltiples salidas de una función – CAFxX

+0

OK. Ya veo. ¡Gracias! – dalibocai

0

No. Podría haber múltiples bloques básicos de terminador de una función, por ejemplo, una función que contenga múltiples declaraciones de retorno. cada bloque básico que contenga una declaración de retorno de la función se denominará bloque terminador o bloque básico terminador. Para detectar todos los bloques básicos que son terminador bloques básicos (es decir, contienen una instrucción de retorno) haga lo siguiente:

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