From 09e8ef3e0dae29be7aa21a6e22a118a3f545945f Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Wed, 12 Aug 2026 19:45:09 +0800 Subject: [Tooling] Complete the LLVM MIR command-line contract --- backend/tools/MIRTool/CMakeLists.txt | 4 +- backend/tools/MIRTool/MIRToolMain.cpp | 221 +++++++++++++--------- backend/tools/MIRTool/MIRToolOperationsTest.cmake | 34 ++-- backend/tools/MIRTool/MIRToolOutputTest.cmake | 8 +- backend/tools/MIRTool/MIRToolStageTest.cmake | 64 +++---- 5 files changed, 176 insertions(+), 155 deletions(-) (limited to 'backend/tools') diff --git a/backend/tools/MIRTool/CMakeLists.txt b/backend/tools/MIRTool/CMakeLists.txt index 3388481..37738c1 100644 --- a/backend/tools/MIRTool/CMakeLists.txt +++ b/backend/tools/MIRTool/CMakeLists.txt @@ -53,7 +53,7 @@ foreach( "-DTOOL=$" "-DINPUT=${RCCBackendMIRToolInputDirectory}/${InputName}.mir" "-DOUTPUT=${RCCBackendMIRToolTestDirectory}/${InputName}.s" - -DOUTPUT_KIND=assembly + -DOUTPUT_KIND=asm "-DLLVM_MC=${RCCBackendMIRToolLLVMMC}" -P "${CMAKE_CURRENT_SOURCE_DIR}/MIRToolOutputTest.cmake" ) @@ -64,7 +64,7 @@ foreach( "-DTOOL=$" "-DINPUT=${RCCBackendMIRToolInputDirectory}/${InputName}.mir" "-DOUTPUT=${RCCBackendMIRToolTestDirectory}/${InputName}.o" - -DOUTPUT_KIND=object + -DOUTPUT_KIND=obj "-DLLVM_READELF=${RCCBackendMIRToolLLVMReadELF}" "-DLLVM_OBJDUMP=${RCCBackendMIRToolLLVMObjdump}" -P "${CMAKE_CURRENT_SOURCE_DIR}/MIRToolOutputTest.cmake" diff --git a/backend/tools/MIRTool/MIRToolMain.cpp b/backend/tools/MIRTool/MIRToolMain.cpp index ea180d6..2c0fe8d 100644 --- a/backend/tools/MIRTool/MIRToolMain.cpp +++ b/backend/tools/MIRTool/MIRToolMain.cpp @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later +#include "rcc/CodeGen/CommandFlags.h" #include "rcc/CodeGen/MachineFunction.h" #include "rcc/Support/Error.h" #include "rcc/Target/RISCV/RISCVPipeline.h" @@ -68,6 +69,7 @@ struct CommandLine final { rcc::tooling::PipelineControls Controls; rcc::tooling::MIRFuzzOptions FuzzOptions; bool OutputWasSpecified = false; + bool DiscardOutput = false; bool PrintActions = false; bool ShowHelp = false; }; @@ -83,14 +85,16 @@ void printUsage(std::ostream &Output) { "pipeline/output:\n" " -run-pass Run one named pass\n" " -passes Run an explicit pass sequence\n" - " -stop-before Stop before a pass occurrence\n" - " -stop-after Stop after a pass occurrence\n" - " -print-before Print snapshots before passes\n" - " -print-after Print snapshots after passes\n" + " -start-before Start before a pass instance\n" + " -start-after Start after a pass instance\n" + " -stop-before Stop before a pass instance\n" + " -stop-after Stop after a pass instance\n" + " -print-before Print snapshots before passes\n" + " -print-after Print snapshots after passes\n" " -simplify-mir Omit default-valued MIR fields\n" " -verify-machineinstrs Verify each machine pass result\n" " --stage-snapshots Print every stage boundary\n" - " --emit Select the output artifact\n" + " -filetype Select the output artifact\n" " -o Select the output path\n" "reproduction/cache/fuzz:\n" " --crash-reproducer Save input and manifest before execution\n" @@ -118,7 +122,9 @@ void printUsage(std::ostream &Output) { std::string_view Name, int &Index, int ArgumentCount, char *Arguments[]) { - if (Argument == Name) { + const std::string LongName = + Name.starts_with('-') && !Name.starts_with("--") ? "-" + std::string(Name) : std::string(); + if (Argument == Name || (!LongName.empty() && Argument == LongName)) { if (Index + 1 >= ArgumentCount) { return rcc::makeUnexpected(ErrorCode::InvalidInvocation, "missing value for command-line option '" + std::string(Name) + @@ -130,6 +136,12 @@ void printUsage(std::ostream &Output) { Prefix.push_back('='); if (Argument.starts_with(Prefix)) return Argument.substr(Prefix.size()); + if (!LongName.empty()) { + std::string LongPrefix(LongName); + LongPrefix.push_back('='); + if (Argument.starts_with(LongPrefix)) + return Argument.substr(LongPrefix.size()); + } return std::nullopt; } @@ -237,6 +249,13 @@ void applyFeatureOverrides(std::vector Overrides, std::vector parseCommandLine(int ArgumentCount, char *Arguments[]) { CommandLine Command; bool ExplicitPipeline = false; + bool UsedRunPass = false; + bool UsedPasses = false; + rcc::CodeGenCommandFlags CodeGenFlags; + std::vector ArgumentViews; + ArgumentViews.reserve(static_cast(ArgumentCount)); + for (int Index = 0; Index < ArgumentCount; ++Index) + ArgumentViews.emplace_back(Arguments[Index]); for (int Index = 1; Index < ArgumentCount; ++Index) { const std::string_view Argument(Arguments[Index]); if (Argument == "--help" || Argument == "-h") { @@ -259,11 +278,11 @@ void applyFeatureOverrides(std::vector Overrides, std::vector Overrides, std::vector(Index); + auto CodeGenFlag = rcc::parseCodeGenCommandFlag(ArgumentViews, CodeGenIndex, CodeGenFlags); + if (!CodeGenFlag) + return std::unexpected(CodeGenFlag.error()); + if (*CodeGenFlag) { + Index = static_cast(CodeGenIndex); continue; } - auto Input = takeOption(Argument, "--input", Index, ArgumentCount, Arguments); - if (!Input) - return std::unexpected(Input.error()); - if (*Input) { - if (!Command.InputPath.empty()) - return rcc::makeUnexpected(ErrorCode::InvalidInvocation, "input path is specified twice"); - Command.InputPath = std::string(**Input); - continue; - } auto Output = takeOption(Argument, "-o", Index, ArgumentCount, Arguments); if (!Output) return std::unexpected(Output.error()); @@ -305,25 +315,22 @@ void applyFeatureOverrides(std::vector Overrides, std::vectorbegin()), + std::make_move_iterator(Names->end())); + UsedRunPass = true; ExplicitPipeline = true; continue; } @@ -331,13 +338,14 @@ void applyFeatureOverrides(std::vector Overrides, std::vector Overrides, std::vector &Destination) -> Expected { @@ -515,28 +543,6 @@ void applyFeatureOverrides(std::vector Overrides, std::vector Overrides, std::vector Overrides, std::vector Overrides, std::vector outputFromArtifact(ArtifactKind Artifact) { - const auto Value = static_cast(static_cast(Artifact)); - if (rcc::tooling::spelling(Value) == "invalid") - return rcc::makeUnexpected(ErrorCode::ReproducerError, "invalid reproducer artifact kind"); - return Value; + switch (Artifact) { + case ArtifactKind::PreLegalizerMIR: + return BackendOutputKind::PreLegalizerMIR; + case ArtifactKind::LegalizedMIR: + return BackendOutputKind::LegalizedMIR; + case ArtifactKind::RegisterBankMIR: + return BackendOutputKind::RegisterBankMIR; + case ArtifactKind::SelectedMIR: + return BackendOutputKind::SelectedMIR; + case ArtifactKind::PostSSAMIR: + return BackendOutputKind::PostSSAMIR; + case ArtifactKind::PostRegisterAllocationMIR: + return BackendOutputKind::PostRegisterAllocationMIR; + case ArtifactKind::FinalMIR: + return BackendOutputKind::FinalMIR; + case ArtifactKind::Assembly: + return BackendOutputKind::Assembly; + case ArtifactKind::RelocatableObject: + return BackendOutputKind::RelocatableObject; + } + return rcc::makeUnexpected(ErrorCode::ReproducerError, "invalid reproducer artifact kind"); } void printSnapshots(const BackendRunResult &Result) { @@ -996,6 +1029,8 @@ runWithCache(const CommandLine &Command, CanonicalMIR Input, const rcc::TargetDe printSnapshots(*Run); if (Command.PrintActions) printActions(*Run); + if (Command.DiscardOutput) + return {}; return writeOutput(Command.OutputPath, Run->Output); } diff --git a/backend/tools/MIRTool/MIRToolOperationsTest.cmake b/backend/tools/MIRTool/MIRToolOperationsTest.cmake index 8dee32f..ff03619 100644 --- a/backend/tools/MIRTool/MIRToolOperationsTest.cmake +++ b/backend/tools/MIRTool/MIRToolOperationsTest.cmake @@ -27,7 +27,7 @@ set(CachedAssembly "${WORK_DIRECTORY}/cached.s") set(ReloadedAssembly "${WORK_DIRECTORY}/reloaded.s") execute_process( COMMAND - "${TOOL}" --input "${INPUT}" --emit assembly --cache-dir "${CacheDirectory}" + "${TOOL}" "${INPUT}" -filetype=asm --cache-dir "${CacheDirectory}" --cache-policy write -o "${CachedAssembly}" RESULT_VARIABLE CacheWriteResult ERROR_VARIABLE CacheWriteDiagnostics @@ -37,7 +37,7 @@ if(NOT CacheWriteResult EQUAL 0) endif() execute_process( COMMAND - "${TOOL}" --input "${INPUT}" --emit assembly --cache-dir "${CacheDirectory}" + "${TOOL}" "${INPUT}" -filetype=asm --cache-dir "${CacheDirectory}" --cache-policy read -o "${ReloadedAssembly}" RESULT_VARIABLE CacheReadResult ERROR_VARIABLE CacheReadDiagnostics @@ -55,7 +55,7 @@ endif() execute_process( COMMAND - "${TOOL}" --input "${INPUT}" --emit assembly --cache-dir + "${TOOL}" "${INPUT}" -filetype=asm --cache-dir "${WORK_DIRECTORY}/empty-cache" --cache-policy read -o "${WORK_DIRECTORY}/miss.s" RESULT_VARIABLE CacheMissResult ERROR_VARIABLE CacheMissDiagnostics @@ -73,7 +73,7 @@ list(GET CachedArtifacts 0 CachedArtifact) file(WRITE "${CachedArtifact}" "corrupt") execute_process( COMMAND - "${TOOL}" --input "${INPUT}" --emit assembly --cache-dir "${CacheDirectory}" + "${TOOL}" "${INPUT}" -filetype=asm --cache-dir "${CacheDirectory}" --cache-policy read -o "${WORK_DIRECTORY}/corrupt.s" RESULT_VARIABLE CorruptCacheResult ERROR_VARIABLE CorruptCacheDiagnostics @@ -87,7 +87,7 @@ set(SuccessAssembly "${WORK_DIRECTORY}/success.s") set(ReplayedAssembly "${WORK_DIRECTORY}/success-replayed.s") execute_process( COMMAND - "${TOOL}" --input "${INPUT}" --emit assembly --crash-reproducer "${SuccessReproducer}" + "${TOOL}" "${INPUT}" -filetype=asm --crash-reproducer "${SuccessReproducer}" -o "${SuccessAssembly}" RESULT_VARIABLE ReproducerWriteResult ERROR_VARIABLE ReproducerWriteDiagnostics @@ -113,7 +113,7 @@ endif() set(RegBankInput "${WORK_DIRECTORY}/regbank.mir") execute_process( - COMMAND "${TOOL}" --input "${INPUT}" --emit regbank-mir -o "${RegBankInput}" + COMMAND "${TOOL}" "${INPUT}" -stop-after=regbankselect -o "${RegBankInput}" RESULT_VARIABLE RegBankResult ERROR_VARIABLE RegBankDiagnostics ) @@ -124,7 +124,7 @@ endif() set(FailureReproducer "${WORK_DIRECTORY}/failure-reproducer") execute_process( COMMAND - "${TOOL}" --input "${RegBankInput}" -run-pass instruction-select --emit selected-mir + "${TOOL}" "${RegBankInput}" -run-pass instruction-select --fuel 0 --crash-reproducer "${FailureReproducer}" -o "${WORK_DIRECTORY}/failure.mir" RESULT_VARIABLE FailureResult ERROR_VARIABLE FailureDiagnostics @@ -151,7 +151,7 @@ endif() set(ActionOutput "${WORK_DIRECTORY}/selected.mir") execute_process( COMMAND - "${TOOL}" --input "${RegBankInput}" -run-pass instruction-select --emit selected-mir + "${TOOL}" "${RegBankInput}" -run-pass instruction-select --print-actions -o "${ActionOutput}" RESULT_VARIABLE ActionResult ERROR_VARIABLE ActionDiagnostics @@ -172,7 +172,7 @@ set(CanonicalReducerSeed "${WORK_DIRECTORY}/reducer-seed.canonical.mir") set(ReducedMIR "${WORK_DIRECTORY}/reduced.mir") file(WRITE "${ReducerSeed}" "${ReducerSeedText}") execute_process( - COMMAND "${TOOL}" --verify --input "${ReducerSeed}" -o "${CanonicalReducerSeed}" + COMMAND "${TOOL}" --verify "${ReducerSeed}" -o "${CanonicalReducerSeed}" RESULT_VARIABLE ReducerSeedResult ERROR_VARIABLE ReducerSeedDiagnostics ) @@ -180,7 +180,7 @@ if(NOT ReducerSeedResult EQUAL 0) message(FATAL_ERROR "reducer seed failed canonicalization: ${ReducerSeedDiagnostics}") endif() execute_process( - COMMAND "${TOOL}" --reduce validity --input "${ReducerSeed}" -o "${ReducedMIR}" + COMMAND "${TOOL}" --reduce validity "${ReducerSeed}" -o "${ReducedMIR}" RESULT_VARIABLE ValidityReducerResult ERROR_VARIABLE ValidityReducerDiagnostics ) @@ -193,7 +193,7 @@ if(NOT ReducedMIRSize LESS CanonicalReducerSeedSize) message(FATAL_ERROR "validity reducer did not make the canonical seed smaller") endif() execute_process( - COMMAND "${TOOL}" --verify --input "${ReducedMIR}" + COMMAND "${TOOL}" --verify "${ReducedMIR}" RESULT_VARIABLE ReducedVerifyResult ERROR_VARIABLE ReducedVerifyDiagnostics ) @@ -204,8 +204,8 @@ endif() set(FailureReducedMIR "${WORK_DIRECTORY}/failure-reduced.mir") execute_process( COMMAND - "${TOOL}" --reduce failure --input "${RegBankInput}" -run-pass instruction-select - --emit selected-mir --fuel 0 -o "${FailureReducedMIR}" + "${TOOL}" --reduce failure "${RegBankInput}" -run-pass instruction-select --fuel 0 -o + "${FailureReducedMIR}" RESULT_VARIABLE FailureReducerResult ERROR_VARIABLE FailureReducerDiagnostics ) @@ -214,7 +214,7 @@ if(NOT FailureReducerResult EQUAL 0) endif() execute_process( COMMAND - "${TOOL}" --input "${FailureReducedMIR}" -run-pass instruction-select --emit selected-mir + "${TOOL}" "${FailureReducedMIR}" -run-pass instruction-select --fuel 0 -o "${WORK_DIRECTORY}/failure-reduced-output.mir" RESULT_VARIABLE ReducedFailureResult ERROR_VARIABLE ReducedFailureDiagnostics @@ -228,7 +228,7 @@ set(FirstFuzz "${WORK_DIRECTORY}/fuzz-1.txt") set(SecondFuzz "${WORK_DIRECTORY}/fuzz-2.txt") execute_process( COMMAND - "${TOOL}" --fuzz all --fuzz-iterations 2 --seed 123 --input "${INPUT}" -o + "${TOOL}" --fuzz all --fuzz-iterations 2 --seed 123 "${INPUT}" -o "${FirstFuzz}" RESULT_VARIABLE FirstFuzzResult ERROR_VARIABLE FirstFuzzDiagnostics @@ -238,7 +238,7 @@ if(NOT FirstFuzzResult EQUAL 0) endif() execute_process( COMMAND - "${TOOL}" --fuzz all --fuzz-iterations 2 --seed 123 --input "${INPUT}" -o + "${TOOL}" --fuzz all --fuzz-iterations 2 --seed 123 "${INPUT}" -o "${SecondFuzz}" RESULT_VARIABLE SecondFuzzResult ERROR_VARIABLE SecondFuzzDiagnostics @@ -264,7 +264,7 @@ if(NOT FuzzText MATCHES "seed=123 executed=11" OR message(FATAL_ERROR "layered fuzz output does not account for all six layers") endif() execute_process( - COMMAND "${TOOL}" --fuzz parser,parser --input "${INPUT}" + COMMAND "${TOOL}" --fuzz parser,parser "${INPUT}" RESULT_VARIABLE DuplicateFuzzResult ERROR_VARIABLE DuplicateFuzzDiagnostics ) diff --git a/backend/tools/MIRTool/MIRToolOutputTest.cmake b/backend/tools/MIRTool/MIRToolOutputTest.cmake index 13159b8..00840bc 100644 --- a/backend/tools/MIRTool/MIRToolOutputTest.cmake +++ b/backend/tools/MIRTool/MIRToolOutputTest.cmake @@ -10,7 +10,7 @@ file(MAKE_DIRECTORY "${OutputDirectory}") set(RepeatedOutput "${OUTPUT}.repeat") execute_process( - COMMAND "${TOOL}" --input "${INPUT}" --emit "${OUTPUT_KIND}" -o "${OUTPUT}" + COMMAND "${TOOL}" "${INPUT}" -filetype "${OUTPUT_KIND}" -o "${OUTPUT}" RESULT_VARIABLE FirstResult ERROR_VARIABLE FirstDiagnostics ) @@ -18,7 +18,7 @@ if(NOT FirstResult EQUAL 0) message(FATAL_ERROR "${OUTPUT_KIND} production failed: ${FirstDiagnostics}") endif() execute_process( - COMMAND "${TOOL}" --input "${INPUT}" --emit "${OUTPUT_KIND}" -o "${RepeatedOutput}" + COMMAND "${TOOL}" "${INPUT}" -filetype "${OUTPUT_KIND}" -o "${RepeatedOutput}" RESULT_VARIABLE SecondResult ERROR_VARIABLE SecondDiagnostics ) @@ -33,7 +33,7 @@ if(NOT ComparisonResult EQUAL 0) message(FATAL_ERROR "${OUTPUT_KIND} output is not deterministic") endif() -if(OUTPUT_KIND STREQUAL "assembly") +if(OUTPUT_KIND STREQUAL "asm") file(READ "${OUTPUT}" Assembly) if(NOT Assembly MATCHES "\\.attribute arch, \"rv64gc\"" OR NOT Assembly MATCHES "jalr x0, x1, 0") @@ -60,7 +60,7 @@ if(OUTPUT_KIND STREQUAL "assembly") message(FATAL_ERROR "LLVM MC rejected MIR tool assembly: ${AssemblerDiagnostics}") endif() endif() -elseif(OUTPUT_KIND STREQUAL "object") +elseif(OUTPUT_KIND STREQUAL "obj") file(READ "${OUTPUT}" ObjectMagic OFFSET 0 LIMIT 4 HEX) if(NOT ObjectMagic STREQUAL "7f454c46") message(FATAL_ERROR "object output is not an ELF file") diff --git a/backend/tools/MIRTool/MIRToolStageTest.cmake b/backend/tools/MIRTool/MIRToolStageTest.cmake index 25c55c3..0d3ef2e 100644 --- a/backend/tools/MIRTool/MIRToolStageTest.cmake +++ b/backend/tools/MIRTool/MIRToolStageTest.cmake @@ -17,12 +17,24 @@ set( post-ra-mir final-mir ) +set( + StageOptions + --verify + -stop-after=legalizer + -stop-after=regbankselect + -stop-after=instruction-select + -stop-after=twoaddressinstruction + -stop-after=PBQPAllocator + -stop-after=final-encodability-verifier +) +set(StageIndex 0) foreach(Stage IN LISTS Stages) + list(GET StageOptions ${StageIndex} StageOption) set(StageOutput "${WORK_DIRECTORY}/${Stage}.mir") set(RepeatedOutput "${WORK_DIRECTORY}/${Stage}.repeat.mir") set(CanonicalOutput "${WORK_DIRECTORY}/${Stage}.canonical.mir") execute_process( - COMMAND "${TOOL}" --input "${INPUT}" --emit "${Stage}" -o "${StageOutput}" + COMMAND "${TOOL}" "${INPUT}" "${StageOption}" -o "${StageOutput}" RESULT_VARIABLE StageResult ERROR_VARIABLE StageDiagnostics ) @@ -30,7 +42,7 @@ foreach(Stage IN LISTS Stages) message(FATAL_ERROR "${Stage} production failed: ${StageDiagnostics}") endif() execute_process( - COMMAND "${TOOL}" --input "${INPUT}" --emit "${Stage}" -o "${RepeatedOutput}" + COMMAND "${TOOL}" "${INPUT}" "${StageOption}" -o "${RepeatedOutput}" RESULT_VARIABLE RepeatedResult ERROR_VARIABLE RepeatedDiagnostics ) @@ -45,7 +57,7 @@ foreach(Stage IN LISTS Stages) message(FATAL_ERROR "${Stage} output is not deterministic") endif() execute_process( - COMMAND "${TOOL}" --verify --input "${StageOutput}" -o "${CanonicalOutput}" + COMMAND "${TOOL}" --verify "${StageOutput}" -o "${CanonicalOutput}" RESULT_VARIABLE VerifyResult ERROR_VARIABLE VerifyDiagnostics ) @@ -59,31 +71,13 @@ foreach(Stage IN LISTS Stages) if(NOT CanonicalResult EQUAL 0) message(FATAL_ERROR "${Stage} output is not canonical after strict reload") endif() + math(EXPR StageIndex "${StageIndex} + 1") endforeach() -set(NoPassOutput "${WORK_DIRECTORY}/none.mir") -execute_process( - COMMAND - "${TOOL}" --input "${INPUT}" -run-pass=none --emit final-mir -o "${NoPassOutput}" - RESULT_VARIABLE NoPassResult - ERROR_VARIABLE NoPassDiagnostics -) -if(NOT NoPassResult EQUAL 0) - message(FATAL_ERROR "LLVM-compatible none pass failed: ${NoPassDiagnostics}") -endif() -execute_process( - COMMAND "${CMAKE_COMMAND}" -E compare_files "${NoPassOutput}" - "${WORK_DIRECTORY}/prelegalizer-mir.mir" - RESULT_VARIABLE NoPassComparisonResult -) -if(NOT NoPassComparisonResult EQUAL 0) - message(FATAL_ERROR "LLVM-compatible none pass changed canonical MIR") -endif() - set(LLVMContractOutput "${WORK_DIRECTORY}/llvm-contract.mir") execute_process( COMMAND - "${TOOL}" "${INPUT}" -run-pass=none -mtriple=riscv64 + "${TOOL}" --verify "${INPUT}" -mtriple=riscv64 -mattr=+m,+a,+f,+d,+c -relocation-model=pic -code-model=small -simplify-mir -verify-machineinstrs -o "${LLVMContractOutput}" RESULT_VARIABLE LLVMContractResult @@ -100,13 +94,7 @@ endif() foreach( RemovedOption IN ITEMS - --run-pass=none - --passes=none - --stop-after=legalizer - --print-before=legalizer --features=+m - --relocation-model=pic - --code-model=small --output=- ) execute_process( @@ -122,7 +110,7 @@ endforeach() set(PassList "${WORK_DIRECTORY}/passes.txt") execute_process( - COMMAND "${TOOL}" --list-passes --input "${INPUT}" -o "${PassList}" + COMMAND "${TOOL}" --list-passes "${INPUT}" -o "${PassList}" RESULT_VARIABLE ListResult ERROR_VARIABLE ListDiagnostics ) @@ -130,7 +118,7 @@ if(NOT ListResult EQUAL 0) message(FATAL_ERROR "pass listing failed: ${ListDiagnostics}") endif() file(READ "${PassList}" PassListText) -foreach(RequiredPass IN ITEMS legalizer regbankselect instruction-select PrologueEpilogueInsertion) +foreach(RequiredPass IN ITEMS legalizer regbankselect instruction-select prologepilog) if(NOT PassListText MATCHES "(^|\n)${RequiredPass}(\n|$)") message(FATAL_ERROR "canonical pass list is missing ${RequiredPass}") endif() @@ -139,7 +127,7 @@ endforeach() set(LegalizedOutput "${WORK_DIRECTORY}/run-pass.mir") execute_process( COMMAND - "${TOOL}" --input "${INPUT}" -run-pass legalizer --emit legalized-mir -o + "${TOOL}" "${INPUT}" -run-pass legalizer -o "${LegalizedOutput}" RESULT_VARIABLE RunPassResult ERROR_VARIABLE RunPassDiagnostics @@ -151,7 +139,7 @@ endif() set(RegBankOutput "${WORK_DIRECTORY}/passes.mir") execute_process( COMMAND - "${TOOL}" --input "${INPUT}" -passes legalizer,regbankselect --emit regbank-mir -o + "${TOOL}" "${INPUT}" -passes legalizer,regbankselect -o "${RegBankOutput}" RESULT_VARIABLE PassesResult ERROR_VARIABLE PassesDiagnostics @@ -163,7 +151,7 @@ endif() set(StoppedOutput "${WORK_DIRECTORY}/stopped.mir") execute_process( COMMAND - "${TOOL}" --input "${INPUT}" -stop-after legalizer --emit final-mir -o + "${TOOL}" "${INPUT}" -stop-after legalizer -o "${StoppedOutput}" RESULT_VARIABLE StopResult ERROR_VARIABLE StopDiagnostics @@ -172,7 +160,7 @@ if(NOT StopResult EQUAL 0) message(FATAL_ERROR "stop-after control failed: ${StopDiagnostics}") endif() execute_process( - COMMAND "${TOOL}" --verify --input "${StoppedOutput}" + COMMAND "${TOOL}" --verify "${StoppedOutput}" RESULT_VARIABLE StopVerifyResult ERROR_VARIABLE StopVerifyDiagnostics ) @@ -182,8 +170,7 @@ endif() execute_process( COMMAND - "${TOOL}" --input "${INPUT}" --emit legalized-mir -print-before legalizer -print-after - legalizer -o "${WORK_DIRECTORY}/printed.mir" + "${TOOL}" "${INPUT}" -filetype=null -print-before legalizer -print-after legalizer RESULT_VARIABLE PrintResult ERROR_VARIABLE PrintDiagnostics ) @@ -197,8 +184,7 @@ endif() execute_process( COMMAND - "${TOOL}" --input "${INPUT}" --emit final-mir --stage-snapshots -o - "${WORK_DIRECTORY}/snapshot-final.mir" + "${TOOL}" "${INPUT}" -filetype=null --stage-snapshots RESULT_VARIABLE SnapshotResult ERROR_VARIABLE SnapshotDiagnostics ) -- cgit v1.2.3