public ExceptionRegion cloneForInlining(InlinerInfo ii) { ExceptionRegion newR = new ExceptionRegion(ii.getRenamedLabel(firstRescueBlockLabel), ensureBlockLabel == null ? null : ii.getRenamedLabel(ensureBlockLabel), ii.getRenamedBB(this.startBB)); newR.endBB = ii.getRenamedBB(endBB); newR.firstRescueBB = ii.getRenamedBB(firstRescueBB); for (BasicBlock b: exclusiveBBs) { newR.addBB(ii.getRenamedBB(b)); } for (ExceptionRegion r: nestedRegions) { newR.addNestedRegion(r.cloneForInlining(ii)); } return newR; }
public ExceptionRegion cloneForInlining(InlinerInfo ii) { ExceptionRegion newR = new ExceptionRegion(ii.getRenamedLabel(firstRescueBlockLabel), ensureBlockLabel == null ? null : ii.getRenamedLabel(ensureBlockLabel), ii.getRenamedBB(this.startBB)); newR.endBB = ii.getRenamedBB(endBB); newR.firstRescueBB = ii.getRenamedBB(firstRescueBB); for (BasicBlock b: exclusiveBBs) { newR.addBB(ii.getRenamedBB(b)); } for (ExceptionRegion r: nestedRegions) { newR.addNestedRegion(r.cloneForInlining(ii)); } return newR; }
public BasicBlock getOrCreateRenamedBB(BasicBlock bb) { BasicBlock renamedBB = getRenamedBB(bb); if (renamedBB == null) { renamedBB = new BasicBlock(this.callerCFG, getRenamedLabel(bb.getLabel())); if (bb.isRescueEntry()) renamedBB.markRescueEntryBB(); bbRenameMap.put(bb, renamedBB); } return renamedBB; }
public BasicBlock getOrCreateRenamedBB(BasicBlock bb) { BasicBlock renamedBB = getRenamedBB(bb); if (renamedBB == null) { renamedBB = new BasicBlock(this.callerCFG, getRenamedLabel(bb.getLabel())); if (bb.isRescueEntry()) renamedBB.markRescueEntryBB(); bbRenameMap.put(bb, renamedBB); } return renamedBB; }
private CFG cloneSelf(InlinerInfo ii) { CFG selfClone = new CFG(cfg.getScope()); // clone bbs BasicBlock entry = cfg.getEntryBB(); BasicBlock exit = cfg.getExitBB(); for (BasicBlock b : cfg.getBasicBlocks()) { if ((b != entry) && (b != exit)) { selfClone.addBasicBlock(b.cloneForInlinedMethod(ii)); } } // clone edges for (BasicBlock b: cfg.getBasicBlocks()) { if ((b != entry) && (b != exit)) { BasicBlock rb = ii.getRenamedBB(b); for (Edge<BasicBlock> e : cfg.getOutgoingEdges(b)) { BasicBlock destination = e.getDestination().getData(); if (destination != exit) selfClone.addEdge(rb, ii.getRenamedBB(destination), e.getType()); } } } return selfClone; }
private CFG cloneSelf(InlinerInfo ii) { CFG selfClone = new CFG(cfg.getScope()); // clone bbs BasicBlock entry = cfg.getEntryBB(); BasicBlock exit = cfg.getExitBB(); for (BasicBlock b : cfg.getBasicBlocks()) { if ((b != entry) && (b != exit)) { selfClone.addBasicBlock(b.cloneForInlinedMethod(ii)); } } // clone edges for (BasicBlock b: cfg.getBasicBlocks()) { if ((b != entry) && (b != exit)) { BasicBlock rb = ii.getRenamedBB(b); for (Edge<BasicBlock> e : cfg.getOutgoingEdges(b)) { BasicBlock destination = e.getDestination().getData(); if (destination != exit) selfClone.addEdge(rb, ii.getRenamedBB(destination), e.getType()); } } } return selfClone; }
BasicBlock bClone = ii.getRenamedBB(b); for (Edge<BasicBlock> e : closureCFG.getOutgoingEdges(b)) { BasicBlock edst = e.getDestination().getData(); if (edst != cExit) cfg.addEdge(bClone, ii.getRenamedBB(edst), e.getType()); BasicBlock destination = e.getDestination().getData(); if (destination != cExit) { cfg.addEdge(yieldBB, ii.getRenamedBB(destination), CFG.EdgeType.FALL_THROUGH); BasicBlock source = e.getSource().getData(); if (source != cEntry) { BasicBlock clonedSource = ii.getRenamedBB(source); if (e.getType() == EdgeType.EXCEPTION) { BasicBlock cbProtector = ii.getRenamedBB(closureCFG.getRescuerBBFor(cb)); if (cbProtector != null) { cfg.setRescuerBB(cb, cbProtector); BasicBlock cbEnsurer = ii.getRenamedBB(closureCFG.getEnsurerBBFor(cb)); if (cbEnsurer != null) { cfg.setEnsurerBB(cb, cbEnsurer);
BasicBlock rx = ii.getRenamedBB(x); for (Edge<BasicBlock> e : methodCFG.getOutgoingEdges(x)) { BasicBlock b = e.getDestination().getData(); if (b != mExit) cfg.addEdge(rx, ii.getRenamedBB(b), e.getType()); BasicBlock destination = e.getDestination().getData(); if (destination != mExit) { BasicBlock dstBB = ii.getRenamedBB(destination); if (!ii.canMapArgsStatically()) { dstBB.addInstr(new ToAryInstr((Variable)ii.getArgs(), new Array(call.getCallArgs()), cfg.getScope().getManager().getTrue())); BasicBlock source = e.getSource().getData(); if (source != mEntry) { BasicBlock clonedSource = ii.getRenamedBB(source); if (e.getType() == EdgeType.EXCEPTION) { BasicBlock xRenamed = ii.getRenamedBB(x); BasicBlock xProtector = methodCFG.getRescuerBBFor(x); if (xProtector != null) { cfg.setRescuerBB(xRenamed, ii.getRenamedBB(xProtector)); } else if (callBBrescuer != null) { cfg.setRescuerBB(xRenamed, callBBrescuer); cfg.setEnsurerBB(xRenamed, ii.getRenamedBB(xEnsurer)); } else if (callBBensurer != null) { cfg.setEnsurerBB(xRenamed, callBBensurer);
BasicBlock bClone = ii.getRenamedBB(b); for (Edge<BasicBlock> e : closureCFG.getOutgoingEdges(b)) { BasicBlock edst = e.getDestination().getData(); if (edst != cExit) cfg.addEdge(bClone, ii.getRenamedBB(edst), e.getType()); BasicBlock destination = e.getDestination().getData(); if (destination != cExit) { cfg.addEdge(yieldBB, ii.getRenamedBB(destination), CFG.EdgeType.FALL_THROUGH); BasicBlock source = e.getSource().getData(); if (source != cEntry) { BasicBlock clonedSource = ii.getRenamedBB(source); if (e.getType() == EdgeType.EXCEPTION) { BasicBlock cbProtector = ii.getRenamedBB(closureCFG.getRescuerBBFor(cb)); if (cbProtector != null) { cfg.setRescuerBB(cb, cbProtector); BasicBlock cbEnsurer = ii.getRenamedBB(closureCFG.getEnsurerBBFor(cb)); if (cbEnsurer != null) { cfg.setEnsurerBB(cb, cbEnsurer);
BasicBlock rx = ii.getRenamedBB(x); for (Edge<BasicBlock> e : methodCFG.getOutgoingEdges(x)) { BasicBlock b = e.getDestination().getData(); if (b != mExit) cfg.addEdge(rx, ii.getRenamedBB(b), e.getType()); BasicBlock destination = e.getDestination().getData(); if (destination != mExit) { BasicBlock dstBB = ii.getRenamedBB(destination); if (!ii.canMapArgsStatically()) { dstBB.addInstr(new ToAryInstr((Variable)ii.getArgs(), new Array(call.getCallArgs()), cfg.getScope().getManager().getTrue())); BasicBlock source = e.getSource().getData(); if (source != mEntry) { BasicBlock clonedSource = ii.getRenamedBB(source); if (e.getType() == EdgeType.EXCEPTION) { BasicBlock xRenamed = ii.getRenamedBB(x); BasicBlock xProtector = methodCFG.getRescuerBBFor(x); if (xProtector != null) { cfg.setRescuerBB(xRenamed, ii.getRenamedBB(xProtector)); } else if (callBBrescuer != null) { cfg.setRescuerBB(xRenamed, callBBrescuer); cfg.setEnsurerBB(xRenamed, ii.getRenamedBB(xEnsurer)); } else if (callBBensurer != null) { cfg.setEnsurerBB(xRenamed, callBBensurer);