aboutsummaryrefslogtreecommitdiff
path: root/backend/unittests/Tooling
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 19:36:06 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 19:36:06 +0800
commitb7716aba458fb3d49742f7a3c169deee7345396e (patch)
tree85a8f99a8bd06e9dfbe6e7973c3440f2db7110af /backend/unittests/Tooling
parente7bf0d93d40ad86902d9a8636d24420b5abd2937 (diff)
downloadrcc-project-b7716aba458fb3d49742f7a3c169deee7345396e.tar.gz
rcc-project-b7716aba458fb3d49742f7a3c169deee7345396e.tar.xz
[RISCV] Honor invocation subtarget features
Diffstat (limited to 'backend/unittests/Tooling')
-rw-r--r--backend/unittests/Tooling/PipelineDriverTest.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/backend/unittests/Tooling/PipelineDriverTest.cpp b/backend/unittests/Tooling/PipelineDriverTest.cpp
index b9180ce..5815712 100644
--- a/backend/unittests/Tooling/PipelineDriverTest.cpp
+++ b/backend/unittests/Tooling/PipelineDriverTest.cpp
@@ -102,6 +102,25 @@ int main() {
if (!Source)
return tooling_test::fail(Source.error().message());
+ rcc::tooling::BackendInvocation AtomicOnlyInvocation = Invocation;
+ AtomicOnlyInvocation.Features = {"+a", "+zacas", "+zabha"};
+ AtomicOnlyInvocation.PassPipeline = {"Legalizer"};
+ auto CanonicalAtomicOnly = AtomicOnlyInvocation.canonicalizeAndVerify();
+ if (!CanonicalAtomicOnly)
+ return tooling_test::fail(CanonicalAtomicOnly.error().message());
+ auto AtomicOnlyRun = runInput("atomic-only.mir", *Source, *Target, AtomicOnlyInvocation,
+ rcc::tooling::BackendOutputKind::LegalizedMIR);
+ if (!AtomicOnlyRun)
+ return tooling_test::fail(AtomicOnlyRun.error().message());
+
+ rcc::tooling::BackendInvocation UnsupportedFeatureInvocation = Invocation;
+ UnsupportedFeatureInvocation.Features = {"+v"};
+ auto CanonicalUnsupported = UnsupportedFeatureInvocation.canonicalizeAndVerify();
+ if (!CanonicalUnsupported)
+ return tooling_test::fail(CanonicalUnsupported.error().message());
+ if (rcc::tooling::verifyRV64GCInvocation(UnsupportedFeatureInvocation))
+ return tooling_test::fail("RV64 backend invocation must reject unsupported target features");
+
constexpr std::array StageCases{
std::pair{rcc::tooling::BackendOutputKind::PreLegalizerMIR,
rcc::tooling::BackendStage::PreLegalizerMIR},