org.jikesrvm.compilers.opt.bc2ir
Class BC2IR.InliningBlockLE

java.lang.Object
  extended by org.jikesrvm.compilers.opt.bc2ir.BC2IR.BasicBlockLE
      extended by org.jikesrvm.compilers.opt.bc2ir.BC2IR.InliningBlockLE
Enclosing class:
BC2IR

private static final class BC2IR.InliningBlockLE
extends BC2IR.BasicBlockLE

Extend BasicBlockLE to support inlining during IR generation.


Field Summary
(package private)  BC2IR.BasicBlockLE epilogueBBLE
           
(package private)  GenerationContext gc
           
 
Fields inherited from class org.jikesrvm.compilers.opt.bc2ir.BC2IR.BasicBlockLE
block, fallThrough, handlers, high, left, localState, low, max, parent, right, stackState
 
Constructor Summary
BC2IR.InliningBlockLE(GenerationContext c, BC2IR.BasicBlockLE bble)
           
 
Method Summary
(package private)  void deleteAllOutEdges()
          delete the outgoing CFG edges from all basic blocks in the callee (gc.cfg).
 String toString()
          Returns a string representation of this BBLE.
 
Methods inherited from class org.jikesrvm.compilers.opt.bc2ir.BC2IR.BasicBlockLE
addHandler, clearGenerated, clearInCodeOrder, clearLocalKnown, clearSelfRegen, clearStackKnown, copyIntoLocalState, copyLocalState, genState, isBlack, isGenerated, isInCodeOrder, isLocalKnown, isReadyToGenerate, isRed, isSelfRegen, isStackKnown, setBlack, setGenerated, setInCodeOrder, setLocalKnown, setRed, setSelfRegen, setStackKnown
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

gc

final GenerationContext gc

epilogueBBLE

final BC2IR.BasicBlockLE epilogueBBLE
Constructor Detail

BC2IR.InliningBlockLE

BC2IR.InliningBlockLE(GenerationContext c,
                      BC2IR.BasicBlockLE bble)
Method Detail

toString

public String toString()
Description copied from class: BC2IR.BasicBlockLE
Returns a string representation of this BBLE.

Overrides:
toString in class BC2IR.BasicBlockLE

deleteAllOutEdges

void deleteAllOutEdges()
delete the outgoing CFG edges from all basic blocks in the callee (gc.cfg). This is used when the BBLE preceeding the inlined method block needs to be regenerated, thus forcing us to discard the callee IR (which may contains control flow links to the caller IR because of exception handlers).

TODO: One might be able to do this more efficiently by keeping track of the exposed edges in the generation context and commiting them once the top level generation completes. Probably not worth it, since we expect this method to be called very infrequently.