diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-26 17:55:16 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-26 17:56:11 +0800 |
| commit | 7b3dcced70be227bb43e71d84d11a2f15fb25072 (patch) | |
| tree | 67c98166f2d26eb46f1de7979e2d8dff705ee502 /backend/lib/Target/RISCV/RISCVPseudoExpansion.cpp | |
| parent | 36c4344ddf1866005c62910166ca077bf2e8f62e (diff) | |
| download | rcc-project-7b3dcced70be227bb43e71d84d11a2f15fb25072.tar.gz rcc-project-7b3dcced70be227bb43e71d84d11a2f15fb25072.tar.xz | |
[RISCV] Implement push-pop optimization
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVPseudoExpansion.cpp')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVPseudoExpansion.cpp | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/backend/lib/Target/RISCV/RISCVPseudoExpansion.cpp b/backend/lib/Target/RISCV/RISCVPseudoExpansion.cpp index fb09772..6945f68 100644 --- a/backend/lib/Target/RISCV/RISCVPseudoExpansion.cpp +++ b/backend/lib/Target/RISCV/RISCVPseudoExpansion.cpp @@ -585,19 +585,19 @@ public: return expandAddressPseudo(Instruction, Function, Target, true); return false; } - if (Phase != MachinePseudoExpansionPhase::PostRA) - return false; - if (Instruction.opcode() == opcode(GenericOpcode::COPY)) - return expandCopy(Instruction, Function, Target); - auto Subregister = expandSubregisterCopy(Instruction, Function, Target); - if (!Subregister || *Subregister) - return Subregister; - if (Instruction.opcode() == instructionOpcode(InstructionOpcode::PseudoCALL)) - return expandCall(Instruction, Function, Target, false); - if (Instruction.opcode() == instructionOpcode(InstructionOpcode::PseudoCALLReg)) - return expandCall(Instruction, Function, Target, false); - if (Instruction.opcode() == instructionOpcode(InstructionOpcode::PseudoTAIL)) - return expandCall(Instruction, Function, Target, true); + if (Phase == MachinePseudoExpansionPhase::PostRA) { + if (Instruction.opcode() == opcode(GenericOpcode::COPY)) + return expandCopy(Instruction, Function, Target); + return expandSubregisterCopy(Instruction, Function, Target); + } + if (Phase == MachinePseudoExpansionPhase::TargetLate) { + if (Instruction.opcode() == instructionOpcode(InstructionOpcode::PseudoCALL)) + return expandCall(Instruction, Function, Target, false); + if (Instruction.opcode() == instructionOpcode(InstructionOpcode::PseudoCALLReg)) + return expandCall(Instruction, Function, Target, false); + if (Instruction.opcode() == instructionOpcode(InstructionOpcode::PseudoTAIL)) + return expandCall(Instruction, Function, Target, true); + } return false; } }; |
