/** * Makes a new basic block for this method, which is empty besides * a single {@code GOTO}. Successors and predecessors are not yet * set. * * @return new block */ public SsaBasicBlock makeNewGotoBlock() { int newIndex = blocks.size(); SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this); newBlock.getInsns().add(getGoto(newBlock)); blocks.add(newBlock); return newBlock; }
/** * Makes a new basic block for this method, which is empty besides * a single {@code GOTO}. Successors and predecessors are not yet * set. * * @return new block */ public SsaBasicBlock makeNewGotoBlock() { int newIndex = blocks.size(); SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this); newBlock.getInsns().add(getGoto(newBlock)); blocks.add(newBlock); return newBlock; }
/** * Makes a new basic block for this method, which is empty besides * a single {@code GOTO}. Successors and predecessors are not yet * set. * * @return new block */ public SsaBasicBlock makeNewGotoBlock() { int newIndex = blocks.size(); SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this); newBlock.getInsns().add(getGoto(newBlock)); blocks.add(newBlock); return newBlock; }
/** * Makes a new basic block for this method, which is empty besides * a single {@code GOTO}. Successors and predecessors are not yet * set. * * @return new block */ public SsaBasicBlock makeNewGotoBlock() { int newIndex = blocks.size(); SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this); newBlock.getInsns().add(getGoto(newBlock)); blocks.add(newBlock); return newBlock; }
/** * Makes a new basic block for this method, which is empty besides * a single {@code GOTO}. Successors and predecessors are not yet * set. * * @return new block */ public SsaBasicBlock makeNewGotoBlock() { int newIndex = blocks.size(); SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this); newBlock.getInsns().add(getGoto(newBlock)); blocks.add(newBlock); return newBlock; }
/** * Makes a new basic block for this method, which is empty besides * a single {@code GOTO}. Successors and predecessors are not yet * set. * * @return new block */ public SsaBasicBlock makeNewGotoBlock() { int newIndex = blocks.size(); SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this); newBlock.getInsns().add(getGoto(newBlock)); blocks.add(newBlock); return newBlock; }
/** * Makes a new basic block for this method, which is empty besides * a single {@code GOTO}. Successors and predecessors are not yet * set. * * @return new block */ public SsaBasicBlock makeNewGotoBlock() { int newIndex = blocks.size(); SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this); newBlock.getInsns().add(getGoto(newBlock)); blocks.add(newBlock); return newBlock; }
/** * Makes a new basic block for this method, which is empty besides * a single {@code GOTO}. Successors and predecessors are not yet * set. * * @return new block */ public SsaBasicBlock makeNewGotoBlock() { int newIndex = blocks.size(); SsaBasicBlock newBlock = new SsaBasicBlock(newIndex, maxLabel++, this); newBlock.getInsns().add(getGoto(newBlock)); blocks.add(newBlock); return newBlock; }
/** * Creates an exit block and attaches it to the CFG if this method * exits. Methods that never exit will not have an exit block. This * is called after edge-splitting and phi insertion, since the edges * going into the exit block should not be considered in those steps. */ /*package*/ void makeExitBlock() { if (exitBlockIndex >= 0) { throw new RuntimeException("must be called at most once"); } exitBlockIndex = blocks.size(); SsaBasicBlock exitBlock = new SsaBasicBlock(exitBlockIndex, maxLabel++, this); blocks.add(exitBlock); for (SsaBasicBlock block : blocks) { block.exitBlockFixup(exitBlock); } if (exitBlock.getPredecessors().cardinality() == 0) { // In cases where there is no exit... blocks.remove(exitBlockIndex); exitBlockIndex = -1; maxLabel--; } }
/** * Creates an exit block and attaches it to the CFG if this method * exits. Methods that never exit will not have an exit block. This * is called after edge-splitting and phi insertion, since the edges * going into the exit block should not be considered in those steps. */ /*package*/ void makeExitBlock() { if (exitBlockIndex >= 0) { throw new RuntimeException("must be called at most once"); } exitBlockIndex = blocks.size(); SsaBasicBlock exitBlock = new SsaBasicBlock(exitBlockIndex, maxLabel++, this); blocks.add(exitBlock); for (SsaBasicBlock block : blocks) { block.exitBlockFixup(exitBlock); } if (exitBlock.getPredecessors().cardinality() == 0) { // In cases where there is no exit... blocks.remove(exitBlockIndex); exitBlockIndex = -1; maxLabel--; } }
/** * Creates an exit block and attaches it to the CFG if this method * exits. Methods that never exit will not have an exit block. This * is called after edge-splitting and phi insertion, since the edges * going into the exit block should not be considered in those steps. */ /*package*/ void makeExitBlock() { if (exitBlockIndex >= 0) { throw new RuntimeException("must be called at most once"); } exitBlockIndex = blocks.size(); SsaBasicBlock exitBlock = new SsaBasicBlock(exitBlockIndex, maxLabel++, this); blocks.add(exitBlock); for (SsaBasicBlock block : blocks) { block.exitBlockFixup(exitBlock); } if (exitBlock.getPredecessors().cardinality() == 0) { // In cases where there is no exit... blocks.remove(exitBlockIndex); exitBlockIndex = -1; maxLabel--; } }
/** * Creates an exit block and attaches it to the CFG if this method * exits. Methods that never exit will not have an exit block. This * is called after edge-splitting and phi insertion, since the edges * going into the exit block should not be considered in those steps. */ /*package*/ void makeExitBlock() { if (exitBlockIndex >= 0) { throw new RuntimeException("must be called at most once"); } exitBlockIndex = blocks.size(); SsaBasicBlock exitBlock = new SsaBasicBlock(exitBlockIndex, maxLabel++, this); blocks.add(exitBlock); for (SsaBasicBlock block : blocks) { block.exitBlockFixup(exitBlock); } if (exitBlock.getPredecessors().cardinality() == 0) { // In cases where there is no exit... blocks.remove(exitBlockIndex); exitBlockIndex = -1; maxLabel--; } }
/** * Creates an exit block and attaches it to the CFG if this method * exits. Methods that never exit will not have an exit block. This * is called after edge-splitting and phi insertion, since the edges * going into the exit block should not be considered in those steps. */ /*package*/ void makeExitBlock() { if (exitBlockIndex >= 0) { throw new RuntimeException("must be called at most once"); } exitBlockIndex = blocks.size(); SsaBasicBlock exitBlock = new SsaBasicBlock(exitBlockIndex, maxLabel++, this); blocks.add(exitBlock); for (SsaBasicBlock block : blocks) { block.exitBlockFixup(exitBlock); } if (exitBlock.getPredecessors().cardinality() == 0) { // In cases where there is no exit... blocks.remove(exitBlockIndex); exitBlockIndex = -1; maxLabel--; } }
/** * Creates an exit block and attaches it to the CFG if this method * exits. Methods that never exit will not have an exit block. This * is called after edge-splitting and phi insertion, since the edges * going into the exit block should not be considered in those steps. */ /*package*/ void makeExitBlock() { if (exitBlockIndex >= 0) { throw new RuntimeException("must be called at most once"); } exitBlockIndex = blocks.size(); SsaBasicBlock exitBlock = new SsaBasicBlock(exitBlockIndex, maxLabel++, this); blocks.add(exitBlock); for (SsaBasicBlock block : blocks) { block.exitBlockFixup(exitBlock); } if (exitBlock.getPredecessors().cardinality() == 0) { // In cases where there is no exit... blocks.remove(exitBlockIndex); exitBlockIndex = -1; maxLabel--; } }
/** * Creates an exit block and attaches it to the CFG if this method * exits. Methods that never exit will not have an exit block. This * is called after edge-splitting and phi insertion, since the edges * going into the exit block should not be considered in those steps. */ /*package*/ void makeExitBlock() { if (exitBlockIndex >= 0) { throw new RuntimeException("must be called at most once"); } exitBlockIndex = blocks.size(); SsaBasicBlock exitBlock = new SsaBasicBlock(exitBlockIndex, maxLabel++, this); blocks.add(exitBlock); for (SsaBasicBlock block : blocks) { block.exitBlockFixup(exitBlock); } if (exitBlock.getPredecessors().cardinality() == 0) { // In cases where there is no exit... blocks.remove(exitBlockIndex); exitBlockIndex = -1; maxLabel--; } }
/** * Creates an exit block and attaches it to the CFG if this method * exits. Methods that never exit will not have an exit block. This * is called after edge-splitting and phi insertion, since the edges * going into the exit block should not be considered in those steps. */ /*package*/ void makeExitBlock() { if (exitBlockIndex >= 0) { throw new RuntimeException("must be called at most once"); } exitBlockIndex = blocks.size(); SsaBasicBlock exitBlock = new SsaBasicBlock(exitBlockIndex, maxLabel++, this); blocks.add(exitBlock); for (SsaBasicBlock block : blocks) { block.exitBlockFixup(exitBlock); } if (exitBlock.getPredecessors().cardinality() == 0) { // In cases where there is no exit... blocks.remove(exitBlockIndex); exitBlockIndex = -1; maxLabel--; } }
BasicBlock bb = ropBlocks.get(basicBlockIndex); SsaBasicBlock result = new SsaBasicBlock(basicBlockIndex, bb.getLabel(), parent); InsnList ropInsns = bb.getInsns();
BasicBlock bb = ropBlocks.get(basicBlockIndex); SsaBasicBlock result = new SsaBasicBlock(basicBlockIndex, bb.getLabel(), parent); InsnList ropInsns = bb.getInsns();
BasicBlock bb = ropBlocks.get(basicBlockIndex); SsaBasicBlock result = new SsaBasicBlock(basicBlockIndex, bb.getLabel(), parent); InsnList ropInsns = bb.getInsns();
BasicBlock bb = ropBlocks.get(basicBlockIndex); SsaBasicBlock result = new SsaBasicBlock(basicBlockIndex, bb.getLabel(), parent); InsnList ropInsns = bb.getInsns();