diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 17:37:42 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 17:37:42 +0800 |
| commit | 6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0 (patch) | |
| tree | f363c502f0e2b9cda2f12928049275a433db6ad4 /backend/tools | |
| parent | adcf8c9b1bd1b47e00bf859693112cea1f7e8c9f (diff) | |
| download | rcc-project-6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0.tar.gz rcc-project-6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0.tar.xz | |
[MIR] Accept fixed-baseline LLVM syntax
Diffstat (limited to 'backend/tools')
| -rw-r--r-- | backend/tools/MIRTool/MIRToolMain.cpp | 9 | ||||
| -rw-r--r-- | backend/tools/MIRTool/MIRToolOperationsTest.cmake | 17 |
2 files changed, 23 insertions, 3 deletions
diff --git a/backend/tools/MIRTool/MIRToolMain.cpp b/backend/tools/MIRTool/MIRToolMain.cpp index eeeaac5..f764cf0 100644 --- a/backend/tools/MIRTool/MIRToolMain.cpp +++ b/backend/tools/MIRTool/MIRToolMain.cpp @@ -592,7 +592,7 @@ template <typename IntegerT> continue; } - if (!Argument.starts_with('-')) { + if (Argument == "-" || !Argument.starts_with('-')) { if (!Command.InputPath.empty()) return rcc::makeUnexpected(ErrorCode::InvalidInvocation, "input path is specified twice"); Command.InputPath = std::string(Argument); @@ -780,7 +780,8 @@ runWithCache(const CommandLine &Command, CanonicalMIR Input, const rcc::TargetDe auto Source = readInput(Command.InputPath); if (!Source) return std::unexpected(Source.error()); - auto Input = rcc::tooling::parseAndCanonicalizeMIR(Command.InputPath, std::move(*Source), *Target, + const std::string SourceName = Command.InputPath == "-" ? "<stdin>" : Command.InputPath; + auto Input = rcc::tooling::parseAndCanonicalizeMIR(SourceName, std::move(*Source), *Target, Command.Invocation); if (!Input) return std::unexpected(Input.error()); @@ -981,6 +982,10 @@ int main(int ArgumentCount, char *Arguments[]) { } auto Result = runCommand(*Command); if (!Result) { + if (Result.error().code() == ErrorCode::ParseError) { + std::cerr << Result.error().message() << '\n'; + return 1; + } std::cerr << "rcc-backend-mir: " << rcc::getErrorCodeName(Result.error().code()) << ": " << Result.error().message() << '\n'; return 1; diff --git a/backend/tools/MIRTool/MIRToolOperationsTest.cmake b/backend/tools/MIRTool/MIRToolOperationsTest.cmake index 097e571..003e868 100644 --- a/backend/tools/MIRTool/MIRToolOperationsTest.cmake +++ b/backend/tools/MIRTool/MIRToolOperationsTest.cmake @@ -7,6 +7,21 @@ endif() file(REMOVE_RECURSE "${WORK_DIRECTORY}") file(MAKE_DIRECTORY "${WORK_DIRECTORY}") +set(StandardInputMIR "${WORK_DIRECTORY}/stdin.mir") +execute_process( + COMMAND "${TOOL}" --verify - --output "${StandardInputMIR}" + INPUT_FILE "${INPUT}" + RESULT_VARIABLE StandardInputResult + ERROR_VARIABLE StandardInputDiagnostics +) +if(NOT StandardInputResult EQUAL 0) + message(FATAL_ERROR "standard-input MIR parsing failed: ${StandardInputDiagnostics}") +endif() +file(SIZE "${StandardInputMIR}" StandardInputSize) +if(StandardInputSize EQUAL 0) + message(FATAL_ERROR "standard-input MIR parsing produced no canonical output") +endif() + set(CacheDirectory "${WORK_DIRECTORY}/cache") set(CachedAssembly "${WORK_DIRECTORY}/cached.s") set(ReloadedAssembly "${WORK_DIRECTORY}/reloaded.s") @@ -148,7 +163,7 @@ endif() file(READ "${INPUT}" ReducerSeedText) string(REPLACE " $x10 = COPY %2\n" - " %3:gpr(i64) = G_CONSTANT 99\n $x10 = COPY %2\n" + " %3:gprb(i64) = G_CONSTANT 99\n $x10 = COPY %2\n" ReducerSeedText "${ReducerSeedText}" ) |
