//===--- SILPassPipelineDumper.cpp ----------------------------------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// /// /// \file /// /// This is a simple tool that dumps out a yaml description of one of the /// current list of pass pipelines. Meant to be used to script on top of /// sil-opt. /// //===----------------------------------------------------------------------===// #include "swift/Basic/LLVM.h" #include "swift/Basic/LLVMInitialize.h" #include "swift/SILOptimizer/PassManager/PassPipeline.h" #include "llvm/Support/CommandLine.h" using namespace swift; static llvm::cl::opt PipelineKind(llvm::cl::desc(""), llvm::cl::values( #define PASSPIPELINE(NAME, DESCRIPTION) \ clEnumValN(PassPipelineKind::NAME, #NAME, DESCRIPTION), #include "swift/SILOptimizer/PassManager/PassPipeline.def" clEnumValN(0, "", ""))); namespace llvm { llvm::raw_ostream &operator<<(llvm::raw_ostream &os, PassPipelineKind Kind) { switch (Kind) { #define PASSPIPELINE(NAME, DESCRIPTION) \ case PassPipelineKind::NAME: \ return os << #NAME; #include "swift/SILOptimizer/PassManager/PassPipeline.def" } } } // namespace llvm int main(int argc, char **argv) { INITIALIZE_LLVM(argc, argv); llvm::cl::ParseCommandLineOptions(argc, argv, "Swift SIL Pass Pipeline Dumper\n"); // TODO: add options to manipulate this. SILOptions Opt; switch (PipelineKind) { #define PASSPIPELINE(NAME, DESCRIPTION) \ case PassPipelineKind::NAME: { \ SILPassPipelinePlan::get##NAME##PassPipeline().print(llvm::outs()); \ break; \ } #define PASSPIPELINE_WITH_OPTIONS(NAME, DESCRIPTION) \ case PassPipelineKind::NAME: { \ SILPassPipelinePlan::get##NAME##PassPipeline(Opt).print(llvm::outs()); \ break; \ } #include "swift/SILOptimizer/PassManager/PassPipeline.def" } llvm::outs() << '\n'; return 0; };