From f5d9ddc085055d28d6f9fb3730c3566097f43fb2 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Tue, 25 Aug 2026 03:11:23 +0800 Subject: [CodeGen] Implement the greedy register allocator pipeline --- backend/lib/CodeGen/RegAllocBase.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'backend/lib/CodeGen/RegAllocBase.cpp') diff --git a/backend/lib/CodeGen/RegAllocBase.cpp b/backend/lib/CodeGen/RegAllocBase.cpp index 0fac6aa..da526dd 100644 --- a/backend/lib/CodeGen/RegAllocBase.cpp +++ b/backend/lib/CodeGen/RegAllocBase.cpp @@ -36,10 +36,10 @@ orderedAllocationIntervals(const LiveIntervalsAnalysis::Result &Intervals, return Result; } -Expected RegAllocBase::run() { +Expected RegAllocBase::run(VirtRegMap &Mapping) { const std::uint64_t InitialFingerprint = regalloc_detail::allocationFingerprint(Function); const std::size_t InitialFrameObjects = Function.frameInfo().liveObjectCount(); - VirtRegMap Mapping(Function); + Mapping = VirtRegMap(Function); auto Initialized = regalloc_detail::initializeMapping(Function, Mapping); if (!Initialized) return std::unexpected(Initialized.error()); @@ -75,15 +75,13 @@ Expected RegAllocBase::run() { if (!NewRegisters) return std::unexpected(NewRegisters.error()); } - Analyses.clear(Function); + PreservedAnalyses Preserved; + Preserved.preserve(); + Analyses.invalidate(Function, Preserved, MachinePassChanges::all()); } - - auto Rewritten = rewriteVirtualRegisters(Function, Target, Mapping); - if (!Rewritten) - return std::unexpected(Rewritten.error()); const std::uint64_t FinalFingerprint = regalloc_detail::allocationFingerprint(Function); regalloc_detail::AllocationRunResult Result; - Result.Changed = InitialFingerprint != FinalFingerprint || *Rewritten; + Result.Changed = InitialFingerprint != FinalFingerprint; Result.ChangedInstructions = InitialFingerprint != FinalFingerprint; Result.ChangedFrame = InitialFrameObjects != Function.frameInfo().liveObjectCount(); return Result; -- cgit v1.2.3