public static List<CompilerPass> getPassesFromString(String passList, String defaultPassList) { if (passList == null) passList = defaultPassList; List<CompilerPass> passes = new ArrayList<CompilerPass>(); for (String passClassName : passList.split(",")) { passes.add(createPassInstance(passClassName)); } return passes; } }
public IRManager() { compilerPasses = CompilerPass.getPassesFromString(RubyInstanceConfig.IR_COMPILER_PASSES, DEFAULT_COMPILER_PASSES); inliningCompilerPasses = CompilerPass.getPassesFromString(RubyInstanceConfig.IR_COMPILER_PASSES, DEFAULT_INLINING_COMPILER_PASSES); }
private Object makeSureDependencyHasRunOnce(Class<? extends CompilerPass> passClass, IRScope scope, boolean childScope) { CompilerPass pass = createPassInstance(passClass); Object data = pass.previouslyRun(scope); if (data == null) { data = pass.run(scope, childScope); } else { for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.alreadyExecuted(pass, scope, data, childScope); } } return data; }
protected Object run(IRScope scope, boolean force, boolean childScope) { // System.out.println("--- RUNNING " + this.getLabel() + " on scope: " + scope); Object prevData = null; if (!force && (prevData = previouslyRun(scope)) != null) { // System.out.println("--- RETURNING OLD RESULT ---"); return prevData; } List<Class<? extends CompilerPass>> dependencies = getDependencies(); Object data[] = new Object[dependencies.size()]; for (int i = 0; i < data.length; i++) { data[i] = makeSureDependencyHasRunOnce(dependencies.get(i), scope, childScope); } for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.startExecute(this, scope, childScope); } // Record this pass scope.getExecutedPasses().add(this); Object passData = execute(scope, data); for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.endExecute(this, scope, passData, childScope); } return passData; }
protected Object run(IRScope scope, boolean childScope) { List<Class<? extends CompilerPass>> dependencies = getDependencies(); Object data[] = new Object[dependencies.size()]; for (int i = 0; i < data.length; i++) { data[i] = makeSureDependencyHasRunOnce(dependencies.get(i), scope, childScope); } for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.startExecute(this, scope, childScope); } Object passData = execute(scope, data); for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.endExecute(this, scope, passData, childScope); } return passData; }
public Object run(IRScope scope) { return run(scope, false, false); }
private void runCompilerPasses(List<CompilerPass> passes, IGVDumper dumper) { // All passes are disabled in scopes where BEGIN and END scopes might // screw around with escaped variables. Optimizing for them is not // worth the effort. It is simpler to just go fully safe in scopes // influenced by their presence. if (isUnsafeScope()) { passes = getManager().getSafePasses(this); } if (dumper != null) dumper.dump(getCFG(), "Start"); CompilerPassScheduler scheduler = IRManager.schedulePasses(passes); for (CompilerPass pass : scheduler) { pass.run(this); if (dumper != null) dumper.dump(getCFG(), pass.getShortLabel()); } if (RubyInstanceConfig.IR_UNBOXING) { CompilerPass pass = new UnboxingPass(); pass.run(this); if (dumper != null) dumper.dump(getCFG(), pass.getShortLabel()); } if (dumper != null) dumper.close(); }
@Override public boolean invalidate(IRScope scope) { super.invalidate(scope); scope.putStoreLocalVarPlacementProblem(null); return true; } }
private Object makeSureDependencyHasRunOnce(Class<? extends CompilerPass> passClass, IRScope scope, boolean childScope) { CompilerPass pass = createPassInstance(passClass); Object data = pass.previouslyRun(scope); if (data == null) { data = pass.run(scope, false, childScope); } else { for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.alreadyExecuted(pass, scope, data, childScope); } } return data; }
protected Object run(IRScope scope, boolean force, boolean childScope) { // System.out.println("--- RUNNING " + this.getLabel() + " on scope: " + scope); Object prevData = null; if (!force && (prevData = previouslyRun(scope)) != null) { // System.out.println("--- RETURNING OLD RESULT ---"); return prevData; } List<Class<? extends CompilerPass>> dependencies = getDependencies(); Object data[] = new Object[dependencies.size()]; for (int i = 0; i < data.length; i++) { data[i] = makeSureDependencyHasRunOnce(dependencies.get(i), scope, childScope); } for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.startExecute(this, scope, childScope); } // Record this pass scope.getExecutedPasses().add(this); Object passData = execute(scope, data); for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.endExecute(this, scope, passData, childScope); } return passData; }
protected Object run(IRScope scope, boolean childScope) { List<Class<? extends CompilerPass>> dependencies = getDependencies(); Object data[] = new Object[dependencies.size()]; for (int i = 0; i < data.length; i++) { data[i] = makeSureDependencyHasRunOnce(dependencies.get(i), scope, childScope); } for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.startExecute(this, scope, childScope); } Object passData = execute(scope, data); for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.endExecute(this, scope, passData, childScope); } return passData; }
public Object run(IRScope scope, boolean force) { return run(scope, force, false); }
private void runCompilerPasses(List<CompilerPass> passes, IGVDumper dumper) { // All passes are disabled in scopes where BEGIN and END scopes might // screw around with escaped variables. Optimizing for them is not // worth the effort. It is simpler to just go fully safe in scopes // influenced by their presence. if (isUnsafeScope()) { passes = getManager().getSafePasses(this); } if (dumper != null) dumper.dump(getCFG(), "Start"); CompilerPassScheduler scheduler = IRManager.schedulePasses(passes); for (CompilerPass pass : scheduler) { pass.run(this); if (dumper != null) dumper.dump(getCFG(), pass.getShortLabel()); } if (RubyInstanceConfig.IR_UNBOXING) { CompilerPass pass = new UnboxingPass(); pass.run(this); if (dumper != null) dumper.dump(getCFG(), pass.getShortLabel()); } if (dumper != null) dumper.close(); }
@Override public boolean invalidate(IRScope scope) { super.invalidate(scope); scope.putLiveVariablesProblem(null); return true; } }
private Object makeSureDependencyHasRunOnce(Class<? extends CompilerPass> passClass, IRScope scope, boolean childScope) { CompilerPass pass = createPassInstance(passClass); Object data = pass.previouslyRun(scope); if (data == null) { data = pass.run(scope, childScope); } else { for (CompilerPassListener listener: scope.getManager().getListeners()) { listener.alreadyExecuted(pass, scope, data, childScope); } } return data; }
/** * Shorter label */ public String getShortLabel() { return getLabel(); }
public Object run(IRScope scope) { return run(scope, false, false); }
public static List<CompilerPass> getPassesFromString(String passList, String defaultPassList) { if (passList == null) passList = defaultPassList; List<CompilerPass> passes = new ArrayList<CompilerPass>(); for (String passClassName : passList.split(",")) { passes.add(createPassInstance(passClassName)); } return passes; } }
public IRManager() { compilerPasses = CompilerPass.getPassesFromString(RubyInstanceConfig.IR_COMPILER_PASSES, DEFAULT_COMPILER_PASSES); inliningCompilerPasses = CompilerPass.getPassesFromString(RubyInstanceConfig.IR_COMPILER_PASSES, DEFAULT_INLINING_COMPILER_PASSES); }