private OptimizerStats execImpl(OptimizerContext optimizerCtx) { OptimizerStats stats = new OptimizerStats(NAME); while (true) { InliningVisitor inliner = new InliningVisitor(optimizerCtx); Set<JMethod> modifiedMethods = optimizerCtx.getModifiedMethodsSince(optimizerCtx.getLastStepFor(NAME)); Set<JMethod> affectedMethods = affectedMethods(modifiedMethods, optimizerCtx); optimizerCtx.traverse(inliner, affectedMethods); stats.recordModified(inliner.getNumMods()); optimizerCtx.setLastStepFor(NAME, optimizerCtx.getOptimizationStep()); optimizerCtx.incOptimizationStep(); if (!inliner.didChange()) { break; } // Run a cleanup on the methods we just modified OptimizerStats dceStats = DeadCodeElimination.exec(program, optimizerCtx); stats.recordModified(dceStats.getNumMods()); } JavaAstVerifier.assertProgramIsConsistent(program); return stats; }
private OptimizerStats execImpl() { OptimizerStats stats = new OptimizerStats(NAME); while (true) { InliningVisitor inliner = new InliningVisitor(); inliner.accept(program); stats.recordModified(inliner.getNumMods()); if (!inliner.didChange()) { break; } // Run a cleanup on the methods we just modified for (JMethod method : inliner.modifiedMethods) { OptimizerStats innerStats = DeadCodeElimination.exec(program, method); stats.recordModified(innerStats.getNumMods()); } } return stats; }