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; }
BasicBlock geb = cfg.getGlobalEnsureBB(); if (geb == null) { geb = new BasicBlock(cfg, new Label("_GLOBAL_ENSURE_BLOCK"));
BasicBlock geb = cfg.getGlobalEnsureBB(); if (geb == null) { geb = new BasicBlock(cfg, new Label("_GLOBAL_ENSURE_BLOCK"));
BasicBlock geb = cfg.getGlobalEnsureBB(); if (geb == null) { Variable exc = cfgScope.createTemporaryVariable();
BasicBlock geb = cfg.getGlobalEnsureBB();
BasicBlock geb = cfg.getGlobalEnsureBB();
BasicBlock geb = cfg.getGlobalEnsureBB(); if (geb == null) { Variable exc = cfgScope.createTemporaryVariable();
BasicBlock geb = cfg.getGlobalEnsureBB(); boolean gebProcessed = false; if (geb == null) {
BasicBlock geb = cfg.getGlobalEnsureBB(); boolean gebProcessed = false; if (geb == null) {
BasicBlock closureGEB = closureCFG.getGlobalEnsureBB(); for (BasicBlock b : closureCFG.getBasicBlocks()) { if (!b.isEntryBB() && !b.isExitBB() && b != closureGEB) cfg.addBasicBlock(b.cloneForInlining(ii));
BasicBlock closureGEB = closureCFG.getGlobalEnsureBB(); for (BasicBlock b : closureCFG.getBasicBlocks()) { if (!b.isEntryBB() && !b.isExitBB() && b != closureGEB) cfg.addBasicBlock(b.cloneForInlining(ii));