private void CleanUp() { foreach (var func in this.DuplicatedFunctions) { ModelCleaner.Remove(this.AC, func); } }
public void Run() { this.AC.EliminateDeadVariables(); this.AC.Inline(); if (WhoopCruncherCommandLineOptions.Get().MeasurePassExecutionTime) { Console.WriteLine(" |------ [{0}]", this.EP.Name); Console.WriteLine(" | |"); this.Timer = new ExecutionTimer(); this.Timer.Start(); } HoudiniOutcome outcome = null; this.PerformHoudini(ref outcome); this.ApplyInvariants(ref outcome); this.AC.ResetToProgramTopLevelDeclarations(); ModelCleaner.RemoveGenericTopLevelDeclerations(this.PostAC, this.EP); ModelCleaner.RemoveUnusedTopLevelDeclerations(this.AC); ModelCleaner.RemoveGlobalLocksets(this.PostAC); ModelCleaner.RemoveExistentials(this.PostAC); if (!(WhoopCruncherCommandLineOptions.Get().InliningBound > 0 && this.AC.GetNumOfEntryPointRelatedFunctions(this.EP.Name) <= WhoopCruncherCommandLineOptions.Get().InliningBound)) { ModelCleaner.RemoveWhoopFunctions(this.PostAC); ModelCleaner.RemoveConstants(this.PostAC); ModelCleaner.RemoveImplementations(this.PostAC); } if (WhoopCruncherCommandLineOptions.Get().MeasurePassExecutionTime) { this.Timer.Stop(); Console.WriteLine(" | |"); Console.WriteLine(" | |--- [Total] {0}", this.Timer.Result()); Console.WriteLine(" |"); } Whoop.IO.BoogieProgramEmitter.Emit(this.PostAC.TopLevelDeclarations, WhoopCruncherCommandLineOptions.Get().Files[ WhoopCruncherCommandLineOptions.Get().Files.Count - 1], this.EP.Name + "$summarised", "wbpl"); }
public void Run() { if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime) { Console.WriteLine(" |------ [{0} :: {1}]", this.Pair.EntryPoint1.Name, this.Pair.EntryPoint2.Name); Console.WriteLine(" | |"); this.Timer = new ExecutionTimer(); this.Timer.Start(); } Analysis.Factory.CreateLockAbstraction(this.AC).Run(); if (this.Pair.EntryPoint1.Name.Equals(this.Pair.EntryPoint2.Name)) { Instrumentation.Factory.CreateGlobalRaceCheckingInstrumentation(this.AC, this.Pair.EntryPoint1).Run(); } else { Instrumentation.Factory.CreateGlobalRaceCheckingInstrumentation(this.AC, this.Pair.EntryPoint1).Run(); Instrumentation.Factory.CreateGlobalRaceCheckingInstrumentation(this.AC, this.Pair.EntryPoint2).Run(); } Instrumentation.Factory.CreatePairInstrumentation(this.AC, this.Pair).Run(); Analysis.Factory.CreatePairParameterAliasAnalysis(this.AC, this.Pair).Run(); ModelCleaner.RemoveOriginalInitFunc(this.AC); ModelCleaner.RemoveEntryPointSpecificTopLevelDeclerations(this.AC); ModelCleaner.RemoveUnusedTopLevelDeclerations(this.AC); ModelCleaner.RemoveUnecesseryInfoFromSpecialFunctions(this.AC); // ModelCleaner.RemoveNonPairMemoryRegions(this.AC, pair.Item1, pair.Item2); ModelCleaner.RemoveCorralFunctions(this.AC); if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime) { this.Timer.Stop(); Console.WriteLine(" | |"); Console.WriteLine(" | |--- [Total] {0}", this.Timer.Result()); Console.WriteLine(" |"); } Whoop.IO.BoogieProgramEmitter.Emit(this.AC.TopLevelDeclarations, WhoopEngineCommandLineOptions.Get().Files[ WhoopEngineCommandLineOptions.Get().Files.Count - 1], "check_" + this.Pair.EntryPoint1.Name + "_" + this.Pair.EntryPoint2.Name, "wbpl"); }
/// <summary> /// Starts the engine. /// </summary> internal override void Start() { if (ToolCommandLineOptions.Get().VerboseMode) { Output.PrintLine(". Summarization"); } if (ToolCommandLineOptions.Get().MeasureTime) { base.Timer.Start(); } Instrumentation.Factory.CreateLoopInvariantInstrumentation(base.Program.AC).Run(); base.EmitProgramContext(base.Program.AC, "sequentialized"); if (ToolCommandLineOptions.Get().RequiresInvariantInference) { base.Program.AC = base.ParseContextFromFile("sequentialized"); base.Program.AC.EliminateNonInvariantInferenceAssertions(); base.Program.AC.EliminateDeadVariables(); base.Program.AC.Inline(); var summarizedAnalysisContext = base.ParseContextFromFile("sequentialized"); Analysis.Factory.CreateHoudiniInvariantInference(base.Program.AC, summarizedAnalysisContext).Run(); ModelCleaner.RemoveExistentials(summarizedAnalysisContext); base.EmitProgramContext(summarizedAnalysisContext, "summarised"); } if (ToolCommandLineOptions.Get().MeasureTime) { base.Timer.Stop(); Output.PrintLine("... Summarization done [{0}]", base.Timer.Result()); } }
public void Run() { if (ParsingEngine.AlreadyParsed.Contains(this.EP.Name)) { return; } if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime) { Console.WriteLine(" |------ [{0}]", this.EP.Name); Console.WriteLine(" | |"); this.Timer = new ExecutionTimer(); this.Timer.Start(); } Analysis.Factory.CreateLockAbstraction(this.AC).Run(); Refactoring.Factory.CreateLockRefactoring(this.AC, this.EP).Run(); Refactoring.Factory.CreateFunctionPointerRefactoring(this.AC, this.EP).Run(); Refactoring.Factory.CreateEntryPointRefactoring(this.AC, this.EP).Run(); ModelCleaner.RemoveCorralFunctions(this.AC); ModelCleaner.RemoveModelledProcedureBodies(this.AC); if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime) { this.Timer.Stop(); Console.WriteLine(" | |"); Console.WriteLine(" | |--- [Total] {0}", this.Timer.Result()); Console.WriteLine(" |"); } Whoop.IO.BoogieProgramEmitter.Emit(this.AC.TopLevelDeclarations, WhoopEngineCommandLineOptions.Get().Files[ WhoopEngineCommandLineOptions.Get().Files.Count - 1], this.EP.Name, "wbpl"); ParsingEngine.AlreadyParsed.Add(this.EP.Name); }
public void Run() { if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime) { Console.WriteLine(" |------ [{0}]", this.EP.Name); Console.WriteLine(" | |"); this.Timer = new ExecutionTimer(); this.Timer.Start(); } // Analysis.Factory.CreatePairWatchdogInformationAnalysis(this.AC, this.EP).Run(); if (!WhoopEngineCommandLineOptions.Get().CheckInParamAliasing) { Analysis.Factory.CreateParameterAliasAnalysis(this.AC, this.EP).Run(); } Summarisation.Factory.CreateLocksetSummaryGeneration(this.AC, this.EP).Run(); Summarisation.Factory.CreateAccessCheckingSummaryGeneration(this.AC, this.EP).Run(); // Summarisation.Factory.CreateDomainKnowledgeSummaryGeneration(this.AC, this.EP).Run(); Summarisation.SummaryInformationParser.RegisterSummaryName(this.EP.Name); ModelCleaner.RemoveCorralFunctions(this.AC); if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime) { this.Timer.Stop(); Console.WriteLine(" | |"); Console.WriteLine(" | |--- [Total] {0}", this.Timer.Result()); Console.WriteLine(" |"); } Whoop.IO.BoogieProgramEmitter.Emit(this.AC.TopLevelDeclarations, WhoopEngineCommandLineOptions.Get().Files[ WhoopEngineCommandLineOptions.Get().Files.Count - 1], this.EP.Name + "$instrumented", "wbpl"); }
public void Run() { if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime) { Console.WriteLine(" |------ [{0}]", this.EP.Name); Console.WriteLine(" | |"); this.Timer = new ExecutionTimer(); this.Timer.Start(); } SharedStateAnalyser.AnalyseMemoryRegionsWithPairInformation(this.AC, this.EP); Instrumentation.Factory.CreateInstrumentationRegionsConstructor(this.AC, this.EP).Run(); Instrumentation.Factory.CreateGlobalRaceCheckingInstrumentation(this.AC, this.EP).Run(); Instrumentation.Factory.CreateLocksetInstrumentation(this.AC, this.EP).Run(); Instrumentation.Factory.CreateDomainKnowledgeInstrumentation(this.AC, this.EP).Run(); Instrumentation.Factory.CreateRaceInstrumentation(this.AC, this.EP).Run(); Analysis.Factory.CreateSharedStateAbstraction(this.AC).Run(); if (this.EP.IsEnablingDevice) { Refactoring.Factory.CreateDeviceEnableProgramSlicing(this.AC, this.EP).Run(); } else if (this.EP.IsDisablingDevice) { Refactoring.Factory.CreateDeviceDisableProgramSlicing(this.AC, this.EP).Run(); } if (this.EP.IsClone && this.EP.IsGoingToDisableNetwork) { Refactoring.Factory.CreateNetDisableProgramSlicing(this.AC, this.EP).Run(); } else if (this.EP.IsClone && this.EP.IsCalledWithNetworkDisabled) { Refactoring.Factory.CreateNetEnableProgramSlicing(this.AC, this.EP).Run(); } Instrumentation.Factory.CreateErrorReportingInstrumentation(this.AC, this.EP).Run(); if (WhoopEngineCommandLineOptions.Get().SkipInference) { ModelCleaner.RemoveGenericTopLevelDeclerations(this.AC, this.EP); ModelCleaner.RemoveUnusedTopLevelDeclerations(this.AC); ModelCleaner.RemoveGlobalLocksets(this.AC); ModelCleaner.RemoveInlineFromHelperFunctions(this.AC, this.EP); } else if (WhoopEngineCommandLineOptions.Get().InliningBound > 0 && this.AC.GetNumOfEntryPointRelatedFunctions(this.EP.Name) <= WhoopEngineCommandLineOptions.Get().InliningBound) { this.AC.InlineEntryPoint(this.EP); } else { ModelCleaner.RemoveInlineFromHelperFunctions(this.AC, this.EP); } ModelCleaner.RemoveUnecesseryInfoFromSpecialFunctions(this.AC); ModelCleaner.RemoveCorralFunctions(this.AC); if (WhoopEngineCommandLineOptions.Get().MeasurePassExecutionTime) { this.Timer.Stop(); Console.WriteLine(" | |"); Console.WriteLine(" | |--- [Total] {0}", this.Timer.Result()); Console.WriteLine(" |"); } if (WhoopEngineCommandLineOptions.Get().SkipInference) { Whoop.IO.BoogieProgramEmitter.Emit(this.AC.TopLevelDeclarations, WhoopEngineCommandLineOptions.Get().Files[ WhoopEngineCommandLineOptions.Get().Files.Count - 1], this.EP.Name + "$instrumented", "wbpl"); } }
/// <summary> /// Starts the engine. /// </summary> internal override void Start() { if (ToolCommandLineOptions.Get().VerboseMode) { Output.PrintLine(". Summarization"); } if (ToolCommandLineOptions.Get().MeasureTime) { base.Timer.Start(); } Instrumentation.Factory.CreateLoopInvariantInstrumentation(base.Program.AC).Run(); base.EmitProgramContext(base.Program.AC, "sequentialized"); if (ToolCommandLineOptions.Get().RequiresInvariantInference) { base.Program.AC = base.ParseContextFromFile("sequentialized"); base.Program.AC.EliminateNonInvariantInferenceAssertions(); base.Program.AC.EliminateDeadVariables(); base.Program.AC.Inline(); var summarizedAnalysisContext = base.ParseContextFromFile("sequentialized"); try { Analysis.Factory.CreateHoudiniInvariantInference(base.Program.AC, summarizedAnalysisContext).Run(); } catch (AnalysisFailedException) { if (ToolCommandLineOptions.Get().EnableCorralMode) { var originalAnalysisContext = base.ParseContextFromInputFile(); Instrumentation.Factory.CreateYieldInstrumentation(originalAnalysisContext).Run(); if (ToolCommandLineOptions.Get().OutputFile.Length > 0) { base.EmitProgramContext(originalAnalysisContext); } else { base.EmitProgramContext(originalAnalysisContext, "corral"); } } throw; } ModelCleaner.RemoveExistentials(summarizedAnalysisContext); base.EmitProgramContext(summarizedAnalysisContext, "summarised"); } if (ToolCommandLineOptions.Get().MeasureTime) { base.Timer.Stop(); Output.PrintLine("... Summarization done [{0}]", base.Timer.Result()); } }