aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/CodeGen/RegAllocBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backend/lib/CodeGen/RegAllocBase.cpp')
-rw-r--r--backend/lib/CodeGen/RegAllocBase.cpp14
1 files changed, 6 insertions, 8 deletions
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<regalloc_detail::AllocationRunResult> RegAllocBase::run() {
+Expected<regalloc_detail::AllocationRunResult> 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<regalloc_detail::AllocationRunResult> RegAllocBase::run() {
if (!NewRegisters)
return std::unexpected(NewRegisters.error());
}
- Analyses.clear(Function);
+ PreservedAnalyses Preserved;
+ Preserved.preserve<VirtRegMapAnalysis>();
+ 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;