aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Tooling/MIRFuzzer.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-28 18:51:10 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-28 18:51:10 +0800
commitf89d528efc0228c049c2867dcba886a56bac8619 (patch)
tree7a47f751e729845af1537beee20bc57007d3e21c /backend/lib/Tooling/MIRFuzzer.cpp
parent6889b82a5c9ecc6bd178760c66653d7af0121162 (diff)
downloadrcc-project-f89d528efc0228c049c2867dcba886a56bac8619.tar.gz
rcc-project-f89d528efc0228c049c2867dcba886a56bac8619.tar.xz
[CodeGen] Add target machine registry
Diffstat (limited to 'backend/lib/Tooling/MIRFuzzer.cpp')
-rw-r--r--backend/lib/Tooling/MIRFuzzer.cpp20
1 files changed, 8 insertions, 12 deletions
diff --git a/backend/lib/Tooling/MIRFuzzer.cpp b/backend/lib/Tooling/MIRFuzzer.cpp
index 79e1b50..2ab3b6f 100644
--- a/backend/lib/Tooling/MIRFuzzer.cpp
+++ b/backend/lib/Tooling/MIRFuzzer.cpp
@@ -14,7 +14,7 @@
#include "rcc/CodeGen/MachineRegisterInfo.h"
#include "rcc/CodeGen/MachineVerifier.h"
#include "rcc/CodeGen/TargetDescription.h"
-#include "rcc/Target/RISCV/RISCVPipeline.h"
+#include "rcc/Target/TargetMachine.h"
#include "rcc/Tooling/ArtifactStore.h"
#include "rcc/Tooling/BackendDriver.h"
@@ -262,7 +262,7 @@ private:
if (Function == nullptr || isEarlierStage(Stage, stageForFunction(*Function))) {
return false;
}
- auto Run = runBackend(std::move(*Parsed), Target, Invocation, outputForStage(Stage));
+ auto Run = runBackend(std::move(*Parsed), Invocation, outputForStage(Stage));
if (!Run)
return std::unexpected(Run.error());
auto RoundTrip = verifyCanonicalRoundTrip(std::string(Run->text()), Target, Invocation);
@@ -295,14 +295,10 @@ private:
const MachineFunction *Function = Parsed->Document.unit().functionAt(0);
if (Function == nullptr)
return std::unexpected(Error(ErrorCode::InternalError, "pipeline fuzz input has no function"));
- auto Features = riscv::RISCVSubtargetFeatures::fromFeatureList(Invocation.Features);
- if (!Features)
- return std::unexpected(Features.error());
- auto ABI = riscv::parseRISCVABI(Invocation.ABI);
- if (!ABI)
- return std::unexpected(ABI.error());
- const riscv::RISCVSubtarget Subtarget(*Features, Invocation.Relocation, Invocation.Code, *ABI);
- auto Names = riscv::canonicalPipelinePassNames(*Function, Subtarget);
+ auto TargetMachine = createTargetMachine(Invocation);
+ if (!TargetMachine)
+ return std::unexpected(TargetMachine.error());
+ auto Names = (*TargetMachine)->codeGenPassNames(*Function);
if (!Names)
return std::unexpected(Names.error());
PipelineControls Controls;
@@ -312,7 +308,7 @@ private:
Controls.DetectUnreportedChanges = true;
Invocation.Determinism.ThreadCount = std::array<std::uint32_t, 3>{1, 2, 4}[Random.index(3U)];
const std::string Stop = Controls.StopAfter ? *Controls.StopAfter : "end";
- auto Run = runBackend(std::move(*Parsed), Target, Invocation, ArtifactKind::FinalMIR, Controls);
+ auto Run = runBackend(std::move(*Parsed), Invocation, ArtifactKind::FinalMIR, Controls);
if (!Run)
return std::unexpected(Run.error());
auto RoundTrip = verifyCanonicalRoundTrip(std::string(Run->text()), Target, Invocation);
@@ -486,7 +482,7 @@ using RegisterValues = std::unordered_map<std::uint64_t, std::uint64_t>;
parseAndCanonicalizeMIR("semantic-pipeline.mir", std::string(Canonical), Target, Invocation);
if (!CompiledInput)
return std::unexpected(CompiledInput.error());
- auto Compiled = runBackend(std::move(*CompiledInput), Target, Invocation, ArtifactKind::FinalMIR);
+ auto Compiled = runBackend(std::move(*CompiledInput), Invocation, ArtifactKind::FinalMIR);
if (!Compiled)
return std::unexpected(Compiled.error());
auto Final = parseAndCanonicalizeMIR("semantic-final.mir", std::string(Compiled->text()), Target,