/// <summary> /// The application entry point. /// </summary> /// <param name="arguments">The command line arguments.</param> public static void Main(string[] arguments) { // TODO: sanitize arguments var assemblyPath = arguments[0]; var assembly = AssemblyFactory.GetAssembly(assemblyPath); var configuration = new OptimizationConfiguration(); var branchToReturn = new BranchToReturn(); var inlineFunctionCall = new InlineFunctionCall(configuration); var removeDegenerateBranch = new RemoveDegenerateBranch(); var retargetDoubleBranch = new RetargetDoubleBranch(); var removeDeadCode = new RemoveDeadCode(); var removeNop = new RemoveNop(); var rewriter = new Optimizer( branchToReturn, inlineFunctionCall, removeDegenerateBranch, retargetDoubleBranch, removeDeadCode, removeNop); rewriter.Visit(assembly); var assemblyName = assembly.Name.Name; var assemblyKind = assembly.Kind; // TODO: accept output file name from command line var outputFileName = string.Format( CultureInfo.InvariantCulture, "{0}.inlined.{1}", assemblyName, assemblyKind == AssemblyKind.Dll ? "dll" : "exe"); AssemblyFactory.SaveAssembly(assembly, outputFileName); }
/// <summary> /// Initializes a new instance of the <see cref="OptimizationWorker"/> class. /// </summary> /// <param name="optimizer">The optimizer used for performing optimizations.</param> /// <param name="methodBody">The method of the method to be optimized.</param> public OptimizationWorker(Optimizer optimizer, MethodBody methodBody) { this.optimizer = optimizer; this.methodBody = methodBody; }