diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-12 01:36:47 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-12 01:36:47 +0800 |
| commit | 4937c5107848f1c60262ef729d466e8d90df8d47 (patch) | |
| tree | f89eece938aceaa703ec6adf1951aff3d0855719 | |
| parent | be04617b2196bf62077909f21ea9df7723aae74f (diff) | |
| download | rcc-project-4937c5107848f1c60262ef729d466e8d90df8d47.tar.gz rcc-project-4937c5107848f1c60262ef729d466e8d90df8d47.tar.xz | |
[RISCV] Allow frame indices in ADDI
| -rw-r--r-- | backend/lib/Target/RISCV/RISCV.rccdesc | 2 | ||||
| -rw-r--r-- | backend/unittests/Target/RISCVTargetTest.cpp | 9 |
2 files changed, 6 insertions, 5 deletions
diff --git a/backend/lib/Target/RISCV/RISCV.rccdesc b/backend/lib/Target/RISCV/RISCV.rccdesc index bf5c288..8325777 100644 --- a/backend/lib/Target/RISCV/RISCV.rccdesc +++ b/backend/lib/Target/RISCV/RISCV.rccdesc @@ -488,7 +488,7 @@ instructions: encoding: 1344531 operands: - { kinds: [register], role: def, register_class: GPR, register_bank: GPR, name: RD } - - { kinds: [register], role: use, register_class: GPR, register_bank: GPR, name: RS1 } + - { kinds: [register, frame_index], role: use, register_class: GPR, register_bank: GPR, name: RS1 } - { kinds: [immediate, constant_pool_index, jump_table_index, global_symbol, external_symbol, block_address, mc_symbol], immediate_predicate: SIMM12, allowed_target_flags: 68, name: IMM } num_explicit_defs: 1 flags: [produces_code, rematerializable] diff --git a/backend/unittests/Target/RISCVTargetTest.cpp b/backend/unittests/Target/RISCVTargetTest.cpp index 3438ec9..4e36e1e 100644 --- a/backend/unittests/Target/RISCVTargetTest.cpp +++ b/backend/unittests/Target/RISCVTargetTest.cpp @@ -195,10 +195,11 @@ void testInstructionFacts(TestContext &Context) { Target->instructions().descriptors().size() == TargetInstructionCount + rcc::genericInstructionDescriptors().size() && Addi != nullptr && Addi->Name == "ADDI" && Addi->NumExplicitDefs == 1 && - Addi->Operands.size() == 3 && Addi->Operands.back().ImmediatePredicate && - Load != nullptr && Load->Flags.has(rcc::InstructionFlag::MayLoad) && - Load->RequiresMemoryOperands && Branch != nullptr && - Branch->Flags.has(rcc::InstructionFlag::Terminator) && + Addi->Operands.size() == 3 && + Addi->Operands[1].Kinds.contains(rcc::MachineOperand::Kind::FrameIndex) && + Addi->Operands.back().ImmediatePredicate && Load != nullptr && + Load->Flags.has(rcc::InstructionFlag::MayLoad) && Load->RequiresMemoryOperands && + Branch != nullptr && Branch->Flags.has(rcc::InstructionFlag::Terminator) && Branch->Flags.has(rcc::InstructionFlag::Branch) && Floating != nullptr && Floating->Operands.size() == 4 && Floating->Operands.back().ImmediatePredicate && Floating->AllowExtraImplicitOperands && Atomic != nullptr && |
