diff --git a/include/swift/Driver/Driver.h b/include/swift/Driver/Driver.h index 0c8914a1fd4..c744fa7c214 100644 --- a/include/swift/Driver/Driver.h +++ b/include/swift/Driver/Driver.h @@ -170,6 +170,7 @@ public: SILFuncExtractor,// sil-func-extractor SILNM, // sil-nm SILLLVMGen, // sil-llvm-gen + SILPassPipelineDumper, // sil-passpipeline-dumper AutolinkExtract, // swift-autolink-extract SwiftIndent, // swift-indent SymbolGraph, // swift-symbolgraph diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 372a5942d5e..5b0de5c009e 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -103,6 +103,7 @@ void Driver::parseDriverKind(ArrayRef Args) { .Case("sil-func-extractor", DriverKind::SILFuncExtractor) .Case("sil-nm", DriverKind::SILNM) .Case("sil-llvm-gen", DriverKind::SILLLVMGen) + .Case("sil-passpipeline-dumper", DriverKind::SILPassPipelineDumper) .Case("swift-autolink-extract", DriverKind::AutolinkExtract) .Case("swift-indent", DriverKind::SwiftIndent) .Case("swift-symbolgraph-extract", DriverKind::SymbolGraph) @@ -3563,6 +3564,7 @@ void Driver::printHelp(bool ShowHidden) const { case DriverKind::SILFuncExtractor: case DriverKind::SILNM: case DriverKind::SILLLVMGen: + case DriverKind::SILPassPipelineDumper: case DriverKind::AutolinkExtract: case DriverKind::SwiftIndent: case DriverKind::SymbolGraph: diff --git a/lib/DriverTool/CMakeLists.txt b/lib/DriverTool/CMakeLists.txt index 48c90a49d02..ab692cea89f 100644 --- a/lib/DriverTool/CMakeLists.txt +++ b/lib/DriverTool/CMakeLists.txt @@ -4,6 +4,7 @@ set(driver_sources_and_options sil_func_extractor_main.cpp sil_nm_main.cpp sil_llvm_gen_main.cpp + sil_passpipeline_dumper_main.cpp autolink_extract_main.cpp modulewrap_main.cpp swift_api_digester_main.cpp diff --git a/lib/DriverTool/driver.cpp b/lib/DriverTool/driver.cpp index bbf2f9e10c5..ca9d4ec6bec 100644 --- a/lib/DriverTool/driver.cpp +++ b/lib/DriverTool/driver.cpp @@ -75,6 +75,9 @@ extern int sil_nm_main(ArrayRef argv, void *MainAddr); /// Run 'sil-llvm-gen' extern int sil_llvm_gen_main(ArrayRef argv, void *MainAddr); +/// Run 'sil-passpipeline-dumper' +extern int sil_passpipeline_dumper_main(ArrayRef argv, void *MainAddr); + /// Run 'swift-autolink-extract'. extern int autolink_extract_main(ArrayRef Args, const char *Argv0, void *MainAddr); @@ -301,6 +304,8 @@ static int run_driver(StringRef ExecName, return sil_nm_main(argv, (void *)(intptr_t)getExecutablePath); case Driver::DriverKind::SILLLVMGen: return sil_llvm_gen_main(argv, (void *)(intptr_t)getExecutablePath); + case Driver::DriverKind::SILPassPipelineDumper: + return sil_passpipeline_dumper_main(argv, (void *)(intptr_t)getExecutablePath); case Driver::DriverKind::AutolinkExtract: return autolink_extract_main( TheDriver.getArgsWithoutProgramNameAndDriverMode(argv), diff --git a/tools/sil-passpipeline-dumper/SILPassPipelineDumper.cpp b/lib/DriverTool/sil_passpipeline_dumper_main.cpp similarity index 81% rename from tools/sil-passpipeline-dumper/SILPassPipelineDumper.cpp rename to lib/DriverTool/sil_passpipeline_dumper_main.cpp index 34836356d47..8da57d134f9 100644 --- a/tools/sil-passpipeline-dumper/SILPassPipelineDumper.cpp +++ b/lib/DriverTool/sil_passpipeline_dumper_main.cpp @@ -1,4 +1,4 @@ -//===--- SILPassPipelineDumper.cpp ----------------------------------------===// +//===--- sil_passpipeline_dumper_main.cpp ---------------------------------===// // // This source file is part of the Swift.org open source project // @@ -25,12 +25,15 @@ using namespace swift; -static llvm::cl::opt - PipelineKind(llvm::cl::desc(""), llvm::cl::values( +struct SILPassPipelineDumperOptions { + llvm::cl::opt + PipelineKind = llvm::cl::opt(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) { @@ -44,17 +47,18 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &os, PassPipelineKind Kind) { } } // namespace llvm -int main(int argc, char **argv) { - PROGRAM_START(argc, argv); +int sil_passpipeline_dumper_main(ArrayRef argv, void *MainAddr) { INITIALIZE_LLVM(); - llvm::cl::ParseCommandLineOptions(argc, argv, + SILPassPipelineDumperOptions options; + + llvm::cl::ParseCommandLineOptions(argv.size(), argv.data(), "Swift SIL Pass Pipeline Dumper\n"); // TODO: add options to manipulate this. SILOptions Opt; - switch (PipelineKind) { + switch (options.PipelineKind) { #define PASSPIPELINE(NAME, DESCRIPTION) \ case PassPipelineKind::NAME: { \ SILPassPipelinePlan::get##NAME##PassPipeline(Opt).print(llvm::outs()); \ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0d237ee85b2..3ce6da02994 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -52,7 +52,6 @@ function(get_test_dependencies SDK result_var_name) if (SWIFT_INCLUDE_TOOLS) list(APPEND deps_binaries lldb-moduleimport-test - sil-passpipeline-dumper swift-frontend swift-demangle swift-demangle-yamldump diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 2be38039de3..2d8bc798f2b 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -23,7 +23,6 @@ add_swift_tool_subdirectory(swift-demangle) add_swift_tool_subdirectory(swift-demangle-yamldump) add_swift_tool_subdirectory(swift-def-to-strings-converter) add_swift_tool_subdirectory(swift-serialize-diagnostics) -add_swift_tool_subdirectory(sil-passpipeline-dumper) add_swift_tool_subdirectory(swift-llvm-opt) add_swift_tool_subdirectory(swift-ast-script) add_swift_tool_subdirectory(swift-refactor) diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt index f581cff8fcf..60ea477d6fd 100644 --- a/tools/driver/CMakeLists.txt +++ b/tools/driver/CMakeLists.txt @@ -109,6 +109,11 @@ swift_create_post_build_symlink(swift-frontend DESTINATION "sil-llvm-gen${CMAKE_EXECUTABLE_SUFFIX}" WORKING_DIRECTORY "${SWIFT_RUNTIME_OUTPUT_INTDIR}") +swift_create_post_build_symlink(swift-frontend + SOURCE "swift-frontend${CMAKE_EXECUTABLE_SUFFIX}" + DESTINATION "sil-passpipeline-dumper${CMAKE_EXECUTABLE_SUFFIX}" + WORKING_DIRECTORY "${SWIFT_RUNTIME_OUTPUT_INTDIR}") + swift_create_post_build_symlink(swift-frontend SOURCE "swift-frontend${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION "swift-indent${CMAKE_EXECUTABLE_SUFFIX}" diff --git a/tools/sil-passpipeline-dumper/CMakeLists.txt b/tools/sil-passpipeline-dumper/CMakeLists.txt deleted file mode 100644 index f2440d81b30..00000000000 --- a/tools/sil-passpipeline-dumper/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -add_swift_host_tool(sil-passpipeline-dumper - SILPassPipelineDumper.cpp - SWIFT_COMPONENT testsuite-tools -) -target_link_libraries(sil-passpipeline-dumper PRIVATE - swiftFrontend - swiftIRGen - swiftSema - swiftSILGen - swiftSILOptimizer - # Clang libraries included to appease the linker on linux. - clangBasic - clangCodeGen)