mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This flag enables one to specify a json file that expresses a specific
pipeline in the following format:
[
[
"$PASS_MANAGER_ID",
"run_n_times"|"run_to_fixed_point",
$NUM_ITERATIONS,
"$PASS1", "$PASS2", ...
],
...
]
This will make it easier to experiment with different pass pipelines by
allowing:
1. Automatic generation of pass pipelines without needing to recompile
the compiler itself.
2. Simple scripting of pass pipelines via the json meta language.
3. Enabling the easy expression and reproducability of a specific
pipeline ordering via radar.
In the next commit I will provide a python library for the generation of these
json files with a few types of pipeline generators already created.
Swift SVN r24055
102 lines
2.9 KiB
C++
102 lines
2.9 KiB
C++
//===--- SILOptions.h - Swift Language SILGen and SIL options ---*- C++ -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2015 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 <string>
|
|
#include <climits>
|
|
|
|
namespace swift {
|
|
|
|
class SILOptions {
|
|
public:
|
|
/// Controls the aggressiveness of the performance inliner.
|
|
unsigned InlineThreshold = 150;
|
|
|
|
/// Controls the aggressiveness of devirtualization. 0=disabled.
|
|
unsigned DevirtThreshold = 0;
|
|
|
|
enum LinkingMode {
|
|
/// Skip SIL linking.
|
|
LinkNone,
|
|
|
|
/// Perform normal SIL linking.
|
|
LinkNormal,
|
|
|
|
/// Link all functions during SIL linking.
|
|
LinkAll
|
|
};
|
|
|
|
/// Controls how 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;
|
|
|
|
/// Dump SIL after each transform.
|
|
bool PrintAll = false;
|
|
|
|
/// Dump pass number and name before each transform.
|
|
bool PrintPassName = false;
|
|
|
|
/// Time each transform invocation in the pass manager.
|
|
bool TimeTransforms = false;
|
|
|
|
/// Stop optimizing after the Nth pass. For debugging purposes.
|
|
unsigned NumOptPassesToRun = UINT_MAX;
|
|
|
|
/// Are we debugging sil serialization.
|
|
bool DebugSerialization = false;
|
|
|
|
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.
|
|
Fast = 2, // Disables asserts, library precondition, 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;
|
|
|
|
/// Should we optimize function signatures. Disabled by default.
|
|
bool EnableFuncSigOpts = true;
|
|
|
|
/// Should we emit self as a guaranteed parameter. Disabled by default.
|
|
bool EnableGuaranteedSelf = false;
|
|
|
|
/// Should we use a pass pipeline passed in via a json file? Null by default.
|
|
StringRef ExternalPassPipelineFilename;
|
|
};
|
|
|
|
} // end namespace swift
|
|
|
|
#endif
|