public BasicBlock getOrCreateRenamedBB(BasicBlock bb) { BasicBlock renamedBB = getRenamedBB(bb); if (renamedBB == null) { renamedBB = new BasicBlock(hostCFG, 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(hostCFG, getRenamedLabel(bb.getLabel())); if (bb.isRescueEntry()) renamedBB.markRescueEntryBB(); bbRenameMap.put(bb, renamedBB); } return renamedBB; }
private CFG cloneSelf(InlineCloneInfo ii) { CFG selfClone = new CFG(hostScope); // clone bbs for (BasicBlock b : cfg.getBasicBlocks()) { if (!b.isEntryBB() && !b.isExitBB()) selfClone.addBasicBlock(b.cloneForInlining(ii)); } // clone edges for (BasicBlock b: cfg.getBasicBlocks()) { if (b.isEntryBB() || b.isExitBB()) continue; BasicBlock rb = ii.getRenamedBB(b); for (Edge<BasicBlock> e : cfg.getOutgoingEdges(b)) { BasicBlock destination = e.getDestination().getData(); if (!destination.isExitBB()) selfClone.addEdge(rb, ii.getRenamedBB(destination), e.getType()); } } return selfClone; }
private CFG cloneSelf(InlineCloneInfo ii) { CFG selfClone = new CFG(hostScope); // clone bbs for (BasicBlock b : cfg.getBasicBlocks()) { if (!b.isEntryBB() && !b.isExitBB()) selfClone.addBasicBlock(b.cloneForInlining(ii)); } // clone edges for (BasicBlock b: cfg.getBasicBlocks()) { if (b.isEntryBB() || b.isExitBB()) continue; BasicBlock rb = ii.getRenamedBB(b); for (Edge<BasicBlock> e : cfg.getOutgoingEdges(b)) { BasicBlock destination = e.getDestination().getData(); if (!destination.isExitBB()) selfClone.addEdge(rb, ii.getRenamedBB(destination), e.getType()); } } return selfClone; }
if (b.isEntryBB() || b.isExitBB()) continue; BasicBlock bClone = ii.getRenamedBB(b); for (Edge<BasicBlock> e : closureCFG.getOutgoingEdges(b)) { BasicBlock edst = e.getDestination().getData(); if (!edst.isExitBB() && edst != closureGEB) cfg.addEdge(bClone, ii.getRenamedBB(edst), e.getType()); BasicBlock destination = e.getDestination().getData(); if (!destination.isExitBB() && destination != closureGEB) { cfg.addEdge(beforeInlineBB, ii.getRenamedBB(destination), CFG.EdgeType.FALL_THROUGH); if (source.isEntryBB()) continue; BasicBlock clonedSource = ii.getRenamedBB(source); if (cb.isEntryBB() || cb.isExitBB() || cb == closureGEB) continue; BasicBlock cbProtector = ii.getRenamedBB(closureCFG.getRescuerBBFor(cb)); if (cbProtector != null) { cfg.setRescuerBB(ii.getRenamedBB(cb), cbProtector); } else if (yieldBBrescuer != null) { cfg.setRescuerBB(ii.getRenamedBB(cb), yieldBBrescuer);
if (b.isEntryBB() || b.isExitBB()) continue; BasicBlock bClone = ii.getRenamedBB(b); for (Edge<BasicBlock> e : closureCFG.getOutgoingEdges(b)) { BasicBlock edst = e.getDestination().getData(); if (!edst.isExitBB() && edst != closureGEB) cfg.addEdge(bClone, ii.getRenamedBB(edst), e.getType()); BasicBlock destination = e.getDestination().getData(); if (!destination.isExitBB() && destination != closureGEB) { cfg.addEdge(beforeInlineBB, ii.getRenamedBB(destination), CFG.EdgeType.FALL_THROUGH); if (source.isEntryBB()) continue; BasicBlock clonedSource = ii.getRenamedBB(source); if (cb.isEntryBB() || cb.isExitBB() || cb == closureGEB) continue; BasicBlock cbProtector = ii.getRenamedBB(closureCFG.getRescuerBBFor(cb)); if (cbProtector != null) { cfg.setRescuerBB(ii.getRenamedBB(cb), cbProtector); } else if (yieldBBrescuer != null) { cfg.setRescuerBB(ii.getRenamedBB(cb), yieldBBrescuer);
if (x.isEntryBB() || x.isExitBB()) continue; BasicBlock rx = ii.getRenamedBB(x); for (Edge<BasicBlock> e : methodToInline.getOutgoingEdges(x)) { BasicBlock b = e.getDestination().getData(); if (!b.isExitBB()) cfg.addEdge(rx, ii.getRenamedBB(b), e.getType()); if (destination.isExitBB()) continue; BasicBlock dstBB = ii.getRenamedBB(destination); if (source.isEntryBB()) continue; BasicBlock clonedSource = ii.getRenamedBB(source); if (e.getType() == EdgeType.EXCEPTION) { if (x.isEntryBB() || x.isExitBB()) continue; BasicBlock xRenamed = ii.getRenamedBB(x); BasicBlock xProtector = methodToInline.getRescuerBBFor(x); if (xProtector != null) { cfg.setRescuerBB(xRenamed, ii.getRenamedBB(xProtector)); } else if (callBBrescuer != null) { cfg.setRescuerBB(xRenamed, callBBrescuer);
if (x.isEntryBB() || x.isExitBB()) continue; BasicBlock rx = ii.getRenamedBB(x); for (Edge<BasicBlock> e : methodToInline.getOutgoingEdges(x)) { BasicBlock b = e.getDestination().getData(); if (!b.isExitBB()) cfg.addEdge(rx, ii.getRenamedBB(b), e.getType()); if (destination.isExitBB()) continue; BasicBlock dstBB = ii.getRenamedBB(destination); if (source.isEntryBB()) continue; BasicBlock clonedSource = ii.getRenamedBB(source); if (e.getType() == EdgeType.EXCEPTION) { if (x.isEntryBB() || x.isExitBB()) continue; BasicBlock xRenamed = ii.getRenamedBB(x); BasicBlock xProtector = methodToInline.getRescuerBBFor(x); if (xProtector != null) { cfg.setRescuerBB(xRenamed, ii.getRenamedBB(xProtector)); } else if (callBBrescuer != null) { cfg.setRescuerBB(xRenamed, callBBrescuer);