diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-28 13:45:07 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-28 13:45:07 +0800 |
| commit | e72ad2cd524ff38f162a23d69da5f78494d337ae (patch) | |
| tree | 2e590806b0f610e4392f25f6e8cdff57d2f5a929 /backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp | |
| parent | 3b14bd4d5324b5a280c1ee5567b5526b59e60c5b (diff) | |
| download | rcc-project-e72ad2cd524ff38f162a23d69da5f78494d337ae.tar.gz rcc-project-e72ad2cd524ff38f162a23d69da5f78494d337ae.tar.xz | |
[CodeGen] Centralize machine instruction erasure
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp b/backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp index 16928fb..dc33ad1 100644 --- a/backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp +++ b/backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp @@ -127,11 +127,7 @@ struct PushPopOpcodes final { const std::optional<Register> Source = Copy->Source->registerValue(); if (Destination && Source && Destination->physicalRegister() == ReturnRegister && Source->physicalRegister() == ZeroRegister) { - MachineBasicBlock *Parent = Instruction->parent(); - if (Parent == nullptr) - return makeUnexpected(ErrorCode::InternalError, - "RISC-V return-value assignment became detached"); - if (auto Removed = Parent->removeInstruction(*Instruction); !Removed) + if (auto Removed = Instruction->eraseFromParent(); !Removed) return std::unexpected(Removed.error()); return true; } @@ -244,9 +240,9 @@ public: buildPopReturn(*PopInstruction, *Return, *ReturnZero, Opcodes, Function, Target); if (!NewReturn) return std::unexpected(NewReturn.error()); - if (auto Removed = Block->removeInstruction(*PopInstruction); !Removed) + if (auto Removed = PopInstruction->eraseFromParent(); !Removed) return std::unexpected(Removed.error()); - if (auto Removed = Block->removeInstruction(*Return); !Removed) + if (auto Removed = Return->eraseFromParent(); !Removed) return std::unexpected(Removed.error()); Result.Changes.add(MachinePassChange::Instructions); Result.Changes.add(MachinePassChange::Operands); |
