From b7716aba458fb3d49742f7a3c169deee7345396e Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Tue, 11 Aug 2026 19:36:06 +0800 Subject: [RISCV] Honor invocation subtarget features --- backend/unittests/Tooling/PipelineDriverTest.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'backend/unittests/Tooling') 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}, -- cgit v1.2.3