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; }
@Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append("--- Exception Region ---"); buf.append("\n"); buf.append("Exclusive BBs\n"); for (BasicBlock b: exclusiveBBs) { buf.append("\t"); buf.append(b); buf.append("\n"); } buf.append("End: "); buf.append(endBB.getLabel()); buf.append("\n"); buf.append("Rescuer: "); buf.append(firstRescueBlockLabel); buf.append("\n"); for (ExceptionRegion er: nestedRegions) { buf.append(er.toString()); } return buf.toString(); } }
public void mergeBBs(BasicBlock a, BasicBlock b) { // Remove b from exclusiveBBs. exclusiveBBs.remove(b); // Update endBB if it is b if (endBB == b) { endBB = a; } // Process nested regions for (ExceptionRegion er: nestedRegions) { er.mergeBBs(a, b); } }
ExceptionRegion rr = new ExceptionRegion(ersmi.firstRescueBlockLabel, ersmi.ensureBlockLabel, currBB); rr.addBB(currBB); allExceptionRegions.add(rr); outermostERs.add(rr); } else { nestedExceptionRegions.peek().addNestedRegion(rr); } else if (i instanceof ExceptionRegionEndMarkerInstr) { nestedExceptionRegions.pop().setEndBB(currBB); } else if (iop.endsBasicBlock()) { bbEnded = true; BasicBlock firstRescueBB = bbMap.get(rr.getFirstRescueBlockLabel()); rr.setFirstRescueBB(firstRescueBB); BasicBlock ensureBlockBB = rr.getEnsureBlockLabel() == null ? null : bbMap.get(rr.getEnsureBlockLabel()); for (BasicBlock b : rr.getExclusiveBBs()) { setRescuerBB(b, firstRescueBB); graph.addEdge(b, firstRescueBB, EdgeType.EXCEPTION);
ExceptionRegion rr = new ExceptionRegion(ersmi.getFirstRescueBlockLabel(), currBB); rr.addBB(currBB); allExceptionRegions.add(rr); nestedExceptionRegions.peek().addNestedRegion(rr); } else if (i instanceof ExceptionRegionEndMarkerInstr) { nestedExceptionRegions.pop().setEndBB(currBB); } else if (iop.endsBasicBlock()) { bbEnded = true; Label rescueLabel = rr.getFirstRescueBlockLabel(); if (!Label.UNRESCUED_REGION_LABEL.equals(rescueLabel)) { BasicBlock firstRescueBB = bbMap.get(rescueLabel); for (BasicBlock b: rr.getExclusiveBBs()) { if (b.canRaiseExceptions()) { setRescuerBB(b, firstRescueBB);
private BasicBlock createBB(Label label, Stack<ExceptionRegion> nestedExceptionRegions) { BasicBlock basicBlock = new BasicBlock(this, label); addBasicBlock(basicBlock); if (!nestedExceptionRegions.empty()) nestedExceptionRegions.peek().addBB(basicBlock); return basicBlock; }
exceptionRegions.add(r.cloneForInlining(ii));
ExceptionRegion rr = new ExceptionRegion(ersmi.firstRescueBlockLabel, ersmi.ensureBlockLabel, currBB); rr.addBB(currBB); allExceptionRegions.add(rr); outermostERs.add(rr); } else { nestedExceptionRegions.peek().addNestedRegion(rr); } else if (i instanceof ExceptionRegionEndMarkerInstr) { nestedExceptionRegions.pop().setEndBB(currBB); } else if (iop.endsBasicBlock()) { bbEnded = true; BasicBlock firstRescueBB = bbMap.get(rr.getFirstRescueBlockLabel()); rr.setFirstRescueBB(firstRescueBB); BasicBlock ensureBlockBB = rr.getEnsureBlockLabel() == null ? null : bbMap.get(rr.getEnsureBlockLabel()); for (BasicBlock b : rr.getExclusiveBBs()) { setRescuerBB(b, firstRescueBB); graph.addEdge(b, firstRescueBB, EdgeType.EXCEPTION);
ExceptionRegion rr = new ExceptionRegion(ersmi.getFirstRescueBlockLabel(), currBB); rr.addBB(currBB); allExceptionRegions.add(rr); nestedExceptionRegions.peek().addNestedRegion(rr); } else if (i instanceof ExceptionRegionEndMarkerInstr) { nestedExceptionRegions.pop().setEndBB(currBB); } else if (iop.endsBasicBlock()) { bbEnded = true; Label rescueLabel = rr.getFirstRescueBlockLabel(); if (!Label.UNRESCUED_REGION_LABEL.equals(rescueLabel)) { BasicBlock firstRescueBB = bbMap.get(rescueLabel); for (BasicBlock b: rr.getExclusiveBBs()) { if (b.canRaiseExceptions()) { setRescuerBB(b, firstRescueBB);
private BasicBlock createBB(Label label, Stack<ExceptionRegion> nestedExceptionRegions) { BasicBlock basicBlock = new BasicBlock(this, label); addBasicBlock(basicBlock); if (!nestedExceptionRegions.empty()) nestedExceptionRegions.peek().addBB(basicBlock); return basicBlock; }
exceptionRegions.add(r.cloneForInlining(ii));
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; }
private BasicBlock createBB(Label label, Stack<ExceptionRegion> nestedExceptionRegions) { BasicBlock basicBlock = new BasicBlock(this, label); addBasicBlock(basicBlock); if (label.isGlobalEnsureBlockLabel()) { globalEnsureBB = basicBlock; } if (!nestedExceptionRegions.empty()) nestedExceptionRegions.peek().addBB(basicBlock); return basicBlock; }
@Override public String toString() { StringBuilder buf = new StringBuilder(); buf.append("--- Exception Region ---"); buf.append("\n"); buf.append("Exclusive BBs\n"); for (BasicBlock b: exclusiveBBs) { buf.append("\t"); buf.append(b); buf.append("\n"); } buf.append("End: "); buf.append(endBB.getLabel()); buf.append("\n"); buf.append("Rescuer: "); buf.append(firstRescueBlockLabel); buf.append("\n"); for (ExceptionRegion er: nestedRegions) { buf.append(er.toString()); } return buf.toString(); } }
public void mergeBBs(BasicBlock a, BasicBlock b) { // Remove b from exclusiveBBs. exclusiveBBs.remove(b); // Update endBB if it is b if (endBB == b) { endBB = a; } // Process nested regions for (ExceptionRegion er: nestedRegions) { er.mergeBBs(a, b); } }
exceptionRegions.add(r.cloneForInlining(ii));
private BasicBlock createBB(Label label, Stack<ExceptionRegion> nestedExceptionRegions) { BasicBlock basicBlock = new BasicBlock(this, label); addBasicBlock(basicBlock); if (label.isGlobalEnsureBlockLabel()) { globalEnsureBB = basicBlock; } if (!nestedExceptionRegions.empty()) nestedExceptionRegions.peek().addBB(basicBlock); return basicBlock; }
buf.append(er.toString());
exceptionRegions.add(r.cloneForInlining(ii));