aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-28 13:45:07 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-28 13:45:07 +0800
commite72ad2cd524ff38f162a23d69da5f78494d337ae (patch)
tree2e590806b0f610e4392f25f6e8cdff57d2f5a929 /backend/lib/Target/RISCV/RISCVPushPopOptimizer.cpp
parent3b14bd4d5324b5a280c1ee5567b5526b59e60c5b (diff)
downloadrcc-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.cpp10
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);