diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-12 22:37:49 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-12 22:37:49 +0800 |
| commit | 3341938bb644e6fc39afa6a8fcb1306604999e42 (patch) | |
| tree | a7586c0a8a9d3e7e9dbc8709daf4dd76ca51be5f /backend/unittests/CodeGen | |
| parent | 0bb35fa2306a66f1f0baf118619b5c1640ed9c01 (diff) | |
| download | rcc-project-3341938bb644e6fc39afa6a8fcb1306604999e42.tar.gz rcc-project-3341938bb644e6fc39afa6a8fcb1306604999e42.tar.xz | |
[RISCV] Split the GlobalISel target components
Diffstat (limited to 'backend/unittests/CodeGen')
7 files changed, 40 insertions, 19 deletions
diff --git a/backend/unittests/CodeGen/CMakeLists.txt b/backend/unittests/CodeGen/CMakeLists.txt index 5f73d3b..3ae0f3d 100644 --- a/backend/unittests/CodeGen/CMakeLists.txt +++ b/backend/unittests/CodeGen/CMakeLists.txt @@ -348,6 +348,10 @@ target_link_libraries( add_test(NAME RCCBackend.CodeGen.MachineAnalyses COMMAND RCCBackendCodeGenMachineAnalysesTests) add_executable(RCCBackendCodeGenMachineOptimizationTests MachineOptimizationTest.cpp) +target_include_directories( + RCCBackendCodeGenMachineOptimizationTests + PRIVATE "${RCC_BACKEND_SOURCE_DIR}/lib/Target/RISCV" +) rcc_backend_configure_target(RCCBackendCodeGenMachineOptimizationTests) target_link_libraries( RCCBackendCodeGenMachineOptimizationTests @@ -356,6 +360,10 @@ target_link_libraries( add_test(NAME RCCBackend.CodeGen.MachineOptimization COMMAND RCCBackendCodeGenMachineOptimizationTests) add_executable(RCCBackendCodeGenMachineSchedulingTests MachineSchedulingTest.cpp) +target_include_directories( + RCCBackendCodeGenMachineSchedulingTests + PRIVATE "${RCC_BACKEND_SOURCE_DIR}/lib/Target/RISCV" +) rcc_backend_configure_target(RCCBackendCodeGenMachineSchedulingTests) target_link_libraries( RCCBackendCodeGenMachineSchedulingTests diff --git a/backend/unittests/CodeGen/GlobalISel/CMakeLists.txt b/backend/unittests/CodeGen/GlobalISel/CMakeLists.txt index 319e31f..0ff962b 100644 --- a/backend/unittests/CodeGen/GlobalISel/CMakeLists.txt +++ b/backend/unittests/CodeGen/GlobalISel/CMakeLists.txt @@ -1,5 +1,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later +include_directories("${RCC_BACKEND_SOURCE_DIR}/lib/Target/RISCV") + add_executable(RCCBackendCodeGenLegalizerTests LegalizerTest.cpp) rcc_backend_configure_target(RCCBackendCodeGenLegalizerTests) target_link_libraries( diff --git a/backend/unittests/CodeGen/GlobalISel/InstructionSelectTest.cpp b/backend/unittests/CodeGen/GlobalISel/InstructionSelectTest.cpp index 9e09934..e98f121 100644 --- a/backend/unittests/CodeGen/GlobalISel/InstructionSelectTest.cpp +++ b/backend/unittests/CodeGen/GlobalISel/InstructionSelectTest.cpp @@ -2,11 +2,13 @@ #include "rcc/CodeGen/GlobalISel/InstructionSelect.h" +#include "GISel/RISCVRegisterBankInfo.h" #include "GISelMITest.h" #include "rcc/CodeGen/GlobalISel/Legalizer.h" #include "rcc/CodeGen/GlobalISel/RegBankSelect.h" #include "rcc/CodeGen/MachineMemOperand.h" -#include "rcc/Target/RISCV/RISCVCodeGen.h" +#include "rcc/Target/RISCV/RISCVSubtarget.h" +#include "rcc/Target/RISCV/RISCVTarget.h" #include <algorithm> #include <array> @@ -117,16 +119,16 @@ void testPipeline(TestContext &Context) { Fixture.Function->properties() = {rcc::MachineFunctionProperty::IsSSA, rcc::MachineFunctionProperty::TracksLiveness}; + const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc()); rcc::MachinePassManager Pipeline; Context.expect( - Pipeline.addPass(std::make_unique<rcc::Legalizer>(rcc::riscv::legalizerInfo())).has_value(), + Pipeline.addPass(std::make_unique<rcc::Legalizer>(Subtarget.getLegalizerInfo())).has_value(), "legalizer must be accepted by the pass manager"); + Context.expect(Pipeline.addPass(std::make_unique<rcc::RegBankSelect>(Subtarget.getRegBankInfo())) + .has_value(), + "register-bank selector must be accepted by the pass manager"); Context.expect( - Pipeline.addPass(std::make_unique<rcc::RegBankSelect>(rcc::riscv::registerBankInfo())) - .has_value(), - "register-bank selector must be accepted by the pass manager"); - Context.expect( - Pipeline.addPass(std::make_unique<rcc::InstructionSelect>(rcc::riscv::instructionSelector())) + Pipeline.addPass(std::make_unique<rcc::InstructionSelect>(Subtarget.getInstructionSelector())) .has_value(), "instruction selector must be accepted by the pass manager"); rcc::MachineAnalysisManager Analyses; @@ -198,7 +200,8 @@ void testInstructionSelectionOrder(TestContext &Context) { } Fixture.Function->properties() = {rcc::MachineFunctionProperty::Legalized, rcc::MachineFunctionProperty::RegBankSelected}; - RecordingSelector Selector(rcc::riscv::instructionSelector()); + const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc()); + RecordingSelector Selector(*Subtarget.getInstructionSelector()); rcc::InstructionSelect Pass(Selector); rcc::MachineAnalysisManager Analyses; auto Run = Pass.run(*Fixture.Function, *Target, Analyses); @@ -322,11 +325,12 @@ void testExtendedRV64GCPipeline(TestContext &Context) { Fixture.Function->properties() = {rcc::MachineFunctionProperty::IsSSA, rcc::MachineFunctionProperty::TracksLiveness}; + const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc()); rcc::MachinePassManager Pipeline; - if (!Pipeline.addPass(std::make_unique<rcc::Legalizer>(rcc::riscv::legalizerInfo())) || - !Pipeline.addPass(std::make_unique<rcc::RegBankSelect>(rcc::riscv::registerBankInfo())) || + if (!Pipeline.addPass(std::make_unique<rcc::Legalizer>(Subtarget.getLegalizerInfo())) || + !Pipeline.addPass(std::make_unique<rcc::RegBankSelect>(Subtarget.getRegBankInfo())) || !Pipeline.addPass( - std::make_unique<rcc::InstructionSelect>(rcc::riscv::instructionSelector()))) { + std::make_unique<rcc::InstructionSelect>(Subtarget.getInstructionSelector()))) { Context.expect(false, "extended RV64GC pipeline construction must succeed"); return; } diff --git a/backend/unittests/CodeGen/GlobalISel/LegalizerTest.cpp b/backend/unittests/CodeGen/GlobalISel/LegalizerTest.cpp index 6280182..9cb8a67 100644 --- a/backend/unittests/CodeGen/GlobalISel/LegalizerTest.cpp +++ b/backend/unittests/CodeGen/GlobalISel/LegalizerTest.cpp @@ -3,7 +3,8 @@ #include "rcc/CodeGen/GlobalISel/Legalizer.h" #include "GISelMITest.h" -#include "rcc/Target/RISCV/RISCVCodeGen.h" +#include "rcc/Target/RISCV/RISCVSubtarget.h" +#include "rcc/Target/RISCV/RISCVTarget.h" #include <cstdint> #include <memory> @@ -79,7 +80,8 @@ void testNullAndMissingContracts(TestContext &Context) { Context.expect(Fixture.Function->properties().empty(), "a rejected pass must not publish function properties"); - rcc::Legalizer ValidPass(rcc::riscv::legalizerInfo()); + const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc()); + rcc::Legalizer ValidPass(Subtarget.getLegalizerInfo()); auto MissingResult = ValidPass.run(*Fixture.Function, *Target, Analyses); Context.expect(!MissingResult && MissingResult.error().code() == rcc::ErrorCode::VerificationError, @@ -114,9 +116,10 @@ void testUnsupportedRollback(TestContext &Context) { "unsupported floating operation must be constructible"); Unsupported.Function->properties() = {rcc::MachineFunctionProperty::IsSSA, rcc::MachineFunctionProperty::TracksLiveness}; + const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc()); rcc::MachinePassManager OnlyLegalizer; Context.expect( - OnlyLegalizer.addPass(std::make_unique<rcc::Legalizer>(rcc::riscv::legalizerInfo())) + OnlyLegalizer.addPass(std::make_unique<rcc::Legalizer>(Subtarget.getLegalizerInfo())) .has_value(), "standalone legalizer must be accepted"); rcc::MachineAnalysisManager UnsupportedAnalyses; diff --git a/backend/unittests/CodeGen/GlobalISel/RegBankSelectTest.cpp b/backend/unittests/CodeGen/GlobalISel/RegBankSelectTest.cpp index 3cfa888..d4925eb 100644 --- a/backend/unittests/CodeGen/GlobalISel/RegBankSelectTest.cpp +++ b/backend/unittests/CodeGen/GlobalISel/RegBankSelectTest.cpp @@ -2,8 +2,10 @@ #include "rcc/CodeGen/GlobalISel/RegBankSelect.h" +#include "GISel/RISCVRegisterBankInfo.h" #include "GISelMITest.h" -#include "rcc/Target/RISCV/RISCVCodeGen.h" +#include "rcc/Target/RISCV/RISCVSubtarget.h" +#include "rcc/Target/RISCV/RISCVTarget.h" #include <cstdint> @@ -29,7 +31,8 @@ void testBankConflict(TestContext &Context) { .has_value(), "conflicting bank assignment must be constructible"); Fixture.Function->properties() = {rcc::MachineFunctionProperty::Legalized}; - rcc::RegBankSelect Pass(rcc::riscv::registerBankInfo()); + const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc()); + rcc::RegBankSelect Pass(Subtarget.getRegBankInfo()); rcc::MachineAnalysisManager Analyses; auto Result = Pass.run(*Fixture.Function, *Target, Analyses); Context.expect(!Result && Result.error().code() == rcc::ErrorCode::VerificationError, @@ -61,7 +64,8 @@ void testBankClassOnlyChange(TestContext &Context) { Context.expect(Fixture.Function->registerInfo().setRegisterBank(Value, GPR).has_value(), "pre-existing GPR bank must be assignable"); Fixture.Function->properties() = {rcc::MachineFunctionProperty::Legalized}; - rcc::RegBankSelect Pass(rcc::riscv::registerBankInfo()); + const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc()); + rcc::RegBankSelect Pass(Subtarget.getRegBankInfo()); rcc::MachineAnalysisManager Analyses; auto Result = Pass.run(*Fixture.Function, *Target, Analyses); Context.expect(Result.has_value() && Result->Changed && diff --git a/backend/unittests/CodeGen/MachineOptimizationTest.cpp b/backend/unittests/CodeGen/MachineOptimizationTest.cpp index d4a39fa..f4233f8 100644 --- a/backend/unittests/CodeGen/MachineOptimizationTest.cpp +++ b/backend/unittests/CodeGen/MachineOptimizationTest.cpp @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later +#include "RISCV.h" #include "rcc/CodeGen/GenericOpcodes.h" #include "rcc/CodeGen/MachineBasicBlock.h" #include "rcc/CodeGen/MachineCFGUpdater.h" @@ -17,7 +18,6 @@ #include "rcc/CodeGen/MachineRegisterInfo.h" #include "rcc/CodeGen/MachineSink.h" #include "rcc/CodeGen/TargetMemoryFolding.h" -#include "rcc/Target/RISCV/RISCVCodeGen.h" #include "rcc/Target/RISCV/RISCVTarget.h" #include <cstdint> diff --git a/backend/unittests/CodeGen/MachineSchedulingTest.cpp b/backend/unittests/CodeGen/MachineSchedulingTest.cpp index a485146..83f7000 100644 --- a/backend/unittests/CodeGen/MachineSchedulingTest.cpp +++ b/backend/unittests/CodeGen/MachineSchedulingTest.cpp @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later +#include "RISCV.h" #include "rcc/CodeGen/MachineBasicBlock.h" #include "rcc/CodeGen/MachineFunction.h" #include "rcc/CodeGen/MachineIRBuilder.h" @@ -11,7 +12,6 @@ #include "rcc/CodeGen/ScheduleDAG.h" #include "rcc/CodeGen/ScheduleHazardRecognizer.h" #include "rcc/CodeGen/TargetSchedulingModel.h" -#include "rcc/Target/RISCV/RISCVCodeGen.h" #include "rcc/Target/RISCV/RISCVTarget.h" #include <array> |
