aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/CodeGen/MachinePseudoExpansion.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 17:37:42 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-11 17:37:42 +0800
commit6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0 (patch)
treef363c502f0e2b9cda2f12928049275a433db6ad4 /backend/lib/CodeGen/MachinePseudoExpansion.cpp
parentadcf8c9b1bd1b47e00bf859693112cea1f7e8c9f (diff)
downloadrcc-project-6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0.tar.gz
rcc-project-6a7b083f322f4ac47e58cbf9d4d5fd4d1f6fecd0.tar.xz
[MIR] Accept fixed-baseline LLVM syntax
Diffstat (limited to 'backend/lib/CodeGen/MachinePseudoExpansion.cpp')
-rw-r--r--backend/lib/CodeGen/MachinePseudoExpansion.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/backend/lib/CodeGen/MachinePseudoExpansion.cpp b/backend/lib/CodeGen/MachinePseudoExpansion.cpp
index 676804a..924c515 100644
--- a/backend/lib/CodeGen/MachinePseudoExpansion.cpp
+++ b/backend/lib/CodeGen/MachinePseudoExpansion.cpp
@@ -200,13 +200,20 @@ using BlockSizeSnapshot = std::vector<std::pair<MachineBlockStableID, std::uint6
return Error(Failure.code(), std::move(Prefix));
}
+[[nodiscard]] std::vector<MachineInstr *> layoutInstructions(MachineFunction &Function) {
+ std::vector<MachineInstr *> Result;
+ for (MachineBasicBlock *Block = Function.firstBlock(); Block != nullptr; Block = Block->next())
+ for (MachineInstr *Instruction = Block->firstInstruction(); Instruction != nullptr;
+ Instruction = Instruction->next())
+ Result.push_back(Instruction);
+ return Result;
+}
+
[[nodiscard]] Expected<MachinePassResult>
prepareImplementation(MachineFunction &Function, const TargetDescription &Target,
const TargetPseudoExpansionInfo &Info, MachineActionReplay &Actions) {
bool Changed = false;
- for (MachineInstr *Instruction : Function.allInstructions()) {
- if (Instruction == nullptr || Instruction->parent() == nullptr)
- continue;
+ for (MachineInstr *Instruction : layoutInstructions(Function)) {
const InstructionDescriptor *Descriptor = Target.instructionDescriptor(Instruction->opcode());
if (Descriptor == nullptr)
return makeUnexpected(ErrorCode::VerificationError,
@@ -255,10 +262,7 @@ expandImplementation(MachineFunction &Function, const TargetDescription &Target,
SizesBefore = std::move(*Snapshot);
}
std::vector<MachineInstr *> Worklist;
- for (MachineInstr *Instruction : Function.allInstructions()) {
- if (Instruction != nullptr && Instruction->parent() != nullptr)
- Worklist.push_back(Instruction);
- }
+ Worklist = layoutInstructions(Function);
bool Changed = false;
for (MachineInstr *Instruction : Worklist) {
if (Instruction->parent() == nullptr)
@@ -325,9 +329,7 @@ expandImplementation(MachineFunction &Function, const TargetDescription &Target,
}
}
}
- for (MachineInstr *Instruction : Function.allInstructions()) {
- if (Instruction == nullptr || Instruction->parent() == nullptr)
- continue;
+ for (MachineInstr *Instruction : layoutInstructions(Function)) {
const InstructionDescriptor *Descriptor = Target.instructionDescriptor(Instruction->opcode());
if (Descriptor != nullptr && Descriptor->Flags.has(InstructionFlag::Pseudo) &&
Descriptor->Owner == ownerFor(Phase)) {