newCFG.setRescuerBB(cloneBBMap.get(bb), cloneBBMap.get(rescuerMap.get(bb)));
newCFG.setRescuerBB(cloneBBMap.get(bb), cloneBBMap.get(rescuerMap.get(bb)));
clone.setRescuerBB(cloneBBMap.get(b), cloneBBMap.get(rescuerMap.get(b)));
clone.setRescuerBB(cloneBBMap.get(b), cloneBBMap.get(rescuerMap.get(b)));
public void addGlobalEnsureBB(BasicBlock geb) { assert globalEnsureBB == null: "CFG for scope " + getScope() + " already has a global ensure block."; addBasicBlock(geb); addEdge(geb, getExitBB(), EdgeType.EXIT); for (BasicBlock b: getBasicBlocks()) { if (b != geb && !bbIsProtected(b) && b != getEntryBB()) { addEdge(b, geb, EdgeType.EXCEPTION); setRescuerBB(b, geb); } } globalEnsureBB = geb; }
public void addGlobalEnsureBB(BasicBlock geb) { assert globalEnsureBB == null: "CFG for scope " + getScope() + " already has a global ensure block."; globalEnsureBB = geb; addEdge(geb, getExitBB(), EdgeType.EXIT); for (BasicBlock b: getBasicBlocks()) { if (b != geb && !bbIsProtected(b)) { addEdge(b, geb, EdgeType.EXCEPTION); setRescuerBB(b, geb); setEnsurerBB(b, geb); } } // We are not creating a global exception region and adding it to the list of // exc. regions because in graph form, we dont know what the "last BB" is. // That requires a linearized form of the CFG's bbs. So, the JIT can add // a special case for this global exception block since it has access to the // linearized form. }
public void addGlobalEnsureBB(BasicBlock geb) { assert globalEnsureBB == null: "CFG for scope " + getScope() + " already has a global ensure block."; addBasicBlock(geb); addEdge(geb, getExitBB(), EdgeType.EXIT); for (BasicBlock b: getBasicBlocks()) { if (b != geb && !bbIsProtected(b) && b != getEntryBB()) { addEdge(b, geb, EdgeType.EXCEPTION); setRescuerBB(b, geb); } } globalEnsureBB = geb; }
public void addGlobalEnsureBB(BasicBlock geb) { assert globalEnsureBB == null: "CFG for scope " + getScope() + " already has a global ensure block."; globalEnsureBB = geb; addEdge(geb, getExitBB(), EdgeType.EXIT); for (BasicBlock b: getBasicBlocks()) { if (b != geb && !bbIsProtected(b)) { addEdge(b, geb, EdgeType.EXCEPTION); setRescuerBB(b, geb); setEnsurerBB(b, geb); } } // We are not creating a global exception region and adding it to the list of // exc. regions because in graph form, we dont know what the "last BB" is. // That requires a linearized form of the CFG's bbs. So, the JIT can add // a special case for this global exception block since it has access to the // linearized form. }
setRescuerBB(b, firstRescueBB); graph.addEdge(b, firstRescueBB, EdgeType.EXCEPTION);
setRescuerBB(b, firstRescueBB); graph.addEdge(b, firstRescueBB, EdgeType.EXCEPTION);
private BasicBlock createPrologueBlock(CFG cfg) { BasicBlock entryBB = cfg.getEntryBB(); BasicBlock oldStart = cfg.getOutgoingDestinationOfType(entryBB, CFG.EdgeType.FALL_THROUGH); BasicBlock prologueBB = new BasicBlock(cfg, cfg.getScope().getNewLabel()); cfg.removeEdge(entryBB, oldStart); cfg.addBasicBlock(prologueBB); cfg.addEdge(entryBB, prologueBB, CFG.EdgeType.FALL_THROUGH); cfg.addEdge(prologueBB, oldStart, CFG.EdgeType.FALL_THROUGH); // If there's already a GEB, make sure we have an edge to it and use it to rescue these instrs if (cfg.getGlobalEnsureBB() != null) { BasicBlock geb = cfg.getGlobalEnsureBB(); cfg.addEdge(prologueBB, geb, CFG.EdgeType.EXCEPTION); cfg.setRescuerBB(prologueBB, geb); } return prologueBB; }
private BasicBlock createPrologueBlock(CFG cfg) { BasicBlock entryBB = cfg.getEntryBB(); BasicBlock oldStart = cfg.getOutgoingDestinationOfType(entryBB, CFG.EdgeType.FALL_THROUGH); BasicBlock prologueBB = new BasicBlock(cfg, cfg.getScope().getNewLabel()); cfg.removeEdge(entryBB, oldStart); cfg.addBasicBlock(prologueBB); cfg.addEdge(entryBB, prologueBB, CFG.EdgeType.FALL_THROUGH); cfg.addEdge(prologueBB, oldStart, CFG.EdgeType.FALL_THROUGH); // If there's already a GEB, make sure we have an edge to it and use it to rescue these instrs if (cfg.getGlobalEnsureBB() != null) { BasicBlock geb = cfg.getGlobalEnsureBB(); cfg.addEdge(prologueBB, geb, CFG.EdgeType.EXCEPTION); cfg.setRescuerBB(prologueBB, geb); } return prologueBB; }
setRescuerBB(a, bR); BasicBlock aE = getEnsurerBBFor(a); BasicBlock bE = getEnsurerBBFor(b); if ((aE == null) && (bE != null)) { setRescuerBB(a, bE); setEnsurerBB(a, bE);
setRescuerBB(a, bR); BasicBlock aE = getEnsurerBBFor(a); BasicBlock bE = getEnsurerBBFor(b); if ((aE == null) && (bE != null)) { setRescuerBB(a, bE); setEnsurerBB(a, bE);
if (yieldBBrescuer != null) cfg.setRescuerBB(splitBB, yieldBBrescuer); BasicBlock cbProtector = ii.getRenamedBB(closureCFG.getRescuerBBFor(cb)); if (cbProtector != null) { cfg.setRescuerBB(cb, cbProtector); } else if (yieldBBrescuer != null) { cfg.setRescuerBB(cb, yieldBBrescuer);
if (yieldBBrescuer != null) cfg.setRescuerBB(splitBB, yieldBBrescuer); BasicBlock cbProtector = ii.getRenamedBB(closureCFG.getRescuerBBFor(cb)); if (cbProtector != null) { cfg.setRescuerBB(cb, cbProtector); } else if (yieldBBrescuer != null) { cfg.setRescuerBB(cb, yieldBBrescuer);
if (yieldBBrescuer != null) cfg.setRescuerBB(afterInlineBB, yieldBBrescuer); cfg.setRescuerBB(ii.getRenamedBB(cb), cbProtector); } else if (yieldBBrescuer != null) { cfg.setRescuerBB(ii.getRenamedBB(cb), yieldBBrescuer);
if (yieldBBrescuer != null) cfg.setRescuerBB(afterInlineBB, yieldBBrescuer); cfg.setRescuerBB(ii.getRenamedBB(cb), cbProtector); } else if (yieldBBrescuer != null) { cfg.setRescuerBB(ii.getRenamedBB(cb), yieldBBrescuer);