public void compute_MEET(Edge e, BasicBlock source, FlowGraphNode pred) { StoreLocalVarPlacementNode n = (StoreLocalVarPlacementNode) pred; // Ignore rescue entries -- dirty vars are handled specially for these if (!source.isRescueEntry()) inDirtyVars.addAll(n.outDirtyVars); }
public void compute_MEET(Edge e, BasicBlock source, FlowGraphNode pred) { StoreLocalVarPlacementNode n = (StoreLocalVarPlacementNode) pred; // Ignore rescue entries -- dirty vars are handled specially for these if (!source.isRescueEntry()) inDirtyVars.addAll(n.outDirtyVars); }
@Override public void compute_MEET(Edge e, StoreLocalVarPlacementNode pred) { // Ignore rescue entries -- dirty vars are handled specially for these if (!pred.basicBlock.isRescueEntry()) inDirtyVars.addAll(pred.outDirtyVars); }
@Override public void compute_MEET(Edge e, StoreLocalVarPlacementNode pred) { // Ignore rescue entries -- dirty vars are handled specially for these if (!pred.basicBlock.isRescueEntry()) inDirtyVars.addAll(pred.outDirtyVars); }
public void initSolnForNode() { // For rescue entries, <in> is handled specially if (!getBB().isRescueEntry()) inDirtyVars = new HashSet<LocalVariable>(); }
@Override public void compute_MEET(Edge e, DefinedVariableNode pred) { BitSet predState = basicBlock.isRescueEntry() ? pred.in : pred.out; // If pred.out is TOP, in doesn't change. if (predState != null) { // if in is TOP, init in to a bitset with all 1's // so the intersection computes the right value. if (in == null) { // Make sure 'in' and 'out' are the same size! int n = predState.size(); in = new BitSet(n); in.set(0, n); } in.and(predState); } }
@Override public void compute_MEET(Edge e, UnboxableOpsAnalysisNode pred) { // Ignore rescue entries -- everything is unboxed, as necessary. if (!pred.basicBlock.isRescueEntry()) inState.computeMEET(pred.outState); }
@Override public boolean solutionChanged() { // At the beginning of the scope and rescue block entries, required loads can be discarded // since all these loads will be executed there. if (basicBlock.isEntryBB() || basicBlock.isRescueEntry()) reqdLoads.clear(); //System.out.println("\n For CFG " + getCFG() + " BB " + _bb.getID()); //System.out.println("\t--> IN reqd loads : " + java.util.Arrays.toString(_inReqdLoads.toArray())); //System.out.println("\t--> OUT reqd loads : " + java.util.Arrays.toString(_outReqdLoads.toArray())); return !outRequiredLoads.equals(reqdLoads); }
@Override public void compute_MEET(Edge e, DefinedVariableNode pred) { BitSet predState = basicBlock.isRescueEntry() ? pred.in : pred.out; // If pred.out is TOP, in doesn't change. if (predState != null) { // if in is TOP, init in to a bitset with all 1's // so the intersection computes the right value. if (in == null) { // Make sure 'in' and 'out' are the same size! int n = predState.size(); in = new BitSet(n); in.set(0, n); } in.and(predState); } }
@Override public void init() { outDirtyVars = new HashSet<LocalVariable>(); // For rescue entries, we allocate <in> once and never clear it on each pass. if (getBB().isRescueEntry()) inDirtyVars = new HashSet<LocalVariable>(); }
@Override public void init() { outDirtyVars = new HashSet<LocalVariable>(); // For rescue entries, we allocate <in> once and never clear it on each pass. if (getBB().isRescueEntry()) inDirtyVars = new HashSet<LocalVariable>(); }
@Override public void init() { outDirtyVars = new HashSet<LocalVariable>(); // For rescue entries, we allocate <in> once and never clear it on each pass. if (getBB().isRescueEntry()) inDirtyVars = new HashSet<LocalVariable>(); }
@Override public void init() { outDirtyVars = new HashSet<LocalVariable>(); // For rescue entries, we allocate <in> once and never clear it on each pass. if (getBB().isRescueEntry()) inDirtyVars = new HashSet<LocalVariable>(); }
@Override public void compute_MEET(Edge e, UnboxableOpsAnalysisNode pred) { // Ignore rescue entries -- everything is unboxed, as necessary. if (!pred.basicBlock.isRescueEntry()) inState.computeMEET(pred.outState); }
@Override public boolean solutionChanged() { // At the beginning of the scope and rescue block entries, required loads can be discarded // since all these loads will be executed there. if (basicBlock.isEntryBB() || basicBlock.isRescueEntry()) reqdLoads.clear(); //System.out.println("\n For CFG " + getCFG() + " BB " + _bb.getID()); //System.out.println("\t--> IN reqd loads : " + java.util.Arrays.toString(_inReqdLoads.toArray())); //System.out.println("\t--> OUT reqd loads : " + java.util.Arrays.toString(_outReqdLoads.toArray())); return !outRequiredLoads.equals(reqdLoads); }
public void initSolnForNode() { // For rescue entries, <in> is handled specially if (!getBB().isRescueEntry()) inDirtyVars = new HashSet<LocalVariable>(); }
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(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; }
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; }