//===--- SILOptions.h - Swift Language SILGen and SIL options ---*- C++ -*-===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See http://swift.org/LICENSE.txt for license information // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// // // This file defines the options which control the generation, processing, // and optimization of SIL. // //===----------------------------------------------------------------------===// #ifndef SWIFT_AST_SILOPTIONS_H #define SWIFT_AST_SILOPTIONS_H #include #include namespace swift { class SILOptions { public: /// Controls the aggressiveness of the performance inliner. int InlineThreshold = -1; /// The number of threads for multi-threaded code generation. int NumThreads = 0; enum LinkingMode { /// Skip SIL linking. LinkNone, /// Perform normal SIL linking. LinkNormal, /// Link all functions during SIL linking. LinkAll }; /// Representation of optimization modes. enum class SILOptMode: unsigned { NotSet, None, Debug, Optimize, OptimizeUnchecked }; /// Controls how to perform SIL linking. LinkingMode LinkMode = LinkNormal; /// Remove all runtime assertions during optimizations. bool RemoveRuntimeAsserts = false; /// Controls whether the SIL ARC optimizations are run. bool EnableARCOptimizations = true; /// Controls whether or not paranoid verification checks are run. bool VerifyAll = false; /// Are we debugging sil serialization. bool DebugSerialization = false; /// Whether to dump verbose SIL with scope and location information. bool EmitVerboseSIL = false; /// Optimization mode being used. SILOptMode Optimization = SILOptMode::NotSet; enum AssertConfiguration: unsigned { // Used by standard library code to distinguish between a debug and release // build. Debug = 0, // Enables all asserts. Release = 1, // Disables asserts. Unchecked = 2, // Disables asserts, preconditions, and runtime checks. // Leave the assert_configuration instruction around. DisableReplacement = UINT_MAX }; /// The assert configuration controls how assertions behave. unsigned AssertConfig = Debug; /// Should we print out instruction counts if -print-stats is passed in? bool PrintInstCounts = false; /// Instrument code to generate profiling information. bool GenerateProfile = false; /// Emit a mapping of profile counters for use in coverage. bool EmitProfileCoverageMapping = false; /// Should we use a pass pipeline passed in via a json file? Null by default. StringRef ExternalPassPipelineFilename; /// Emit captures and function contexts using +0 caller-guaranteed ARC /// conventions. bool EnableGuaranteedClosureContexts = false; }; } // end namespace swift #endif