From 9529a1c3dd9946c1e63075f4bf146a731769ebe2 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Mon, 19 Jul 2010 18:41:20 +0000 Subject: Spillers may alter MachineLoopInfo when breaking critical edges, so make it non-const. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108734 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/InlineSpiller.cpp | 11 +++++++---- lib/CodeGen/RegAllocLinearScan.cpp | 4 ++-- lib/CodeGen/Spiller.cpp | 10 +++++----- lib/CodeGen/Spiller.h | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/CodeGen/InlineSpiller.cpp b/lib/CodeGen/InlineSpiller.cpp index 12adcaa3a2..3c6c761b38 100644 --- a/lib/CodeGen/InlineSpiller.cpp +++ b/lib/CodeGen/InlineSpiller.cpp @@ -18,6 +18,7 @@ #include "llvm/CodeGen/LiveIntervalAnalysis.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/MachineLoopInfo.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetInstrInfo.h" @@ -30,6 +31,7 @@ namespace { class InlineSpiller : public Spiller { MachineFunction &mf_; LiveIntervals &lis_; + MachineLoopInfo &loops_; VirtRegMap &vrm_; MachineFrameInfo &mfi_; MachineRegisterInfo &mri_; @@ -53,8 +55,9 @@ class InlineSpiller : public Spiller { ~InlineSpiller() {} public: - InlineSpiller(MachineFunction *mf, LiveIntervals *lis, VirtRegMap *vrm) - : mf_(*mf), lis_(*lis), vrm_(*vrm), + InlineSpiller(MachineFunction *mf, LiveIntervals *lis, MachineLoopInfo *mli, + VirtRegMap *vrm) + : mf_(*mf), lis_(*lis), loops_(*mli), vrm_(*vrm), mfi_(*mf->getFrameInfo()), mri_(mf->getRegInfo()), tii_(*mf->getTarget().getInstrInfo()), @@ -82,9 +85,9 @@ private: namespace llvm { Spiller *createInlineSpiller(MachineFunction *mf, LiveIntervals *lis, - const MachineLoopInfo *mli, + MachineLoopInfo *mli, VirtRegMap *vrm) { - return new InlineSpiller(mf, lis, vrm); + return new InlineSpiller(mf, lis, mli, vrm); } } diff --git a/lib/CodeGen/RegAllocLinearScan.cpp b/lib/CodeGen/RegAllocLinearScan.cpp index 47863e3472..98200af0cf 100644 --- a/lib/CodeGen/RegAllocLinearScan.cpp +++ b/lib/CodeGen/RegAllocLinearScan.cpp @@ -127,7 +127,7 @@ namespace { BitVector allocatableRegs_; LiveIntervals* li_; LiveStacks* ls_; - const MachineLoopInfo *loopInfo; + MachineLoopInfo *loopInfo; /// handled_ - Intervals are added to the handled_ set in the order of their /// start value. This is uses for backtracking. @@ -799,7 +799,7 @@ static void addStackInterval(LiveInterval *cur, LiveStacks *ls_, static float getConflictWeight(LiveInterval *cur, unsigned Reg, LiveIntervals *li_, MachineRegisterInfo *mri_, - const MachineLoopInfo *loopInfo) { + MachineLoopInfo *loopInfo) { float Conflicts = 0; for (MachineRegisterInfo::reg_iterator I = mri_->reg_begin(Reg), E = mri_->reg_end(); I != E; ++I) { diff --git a/lib/CodeGen/Spiller.cpp b/lib/CodeGen/Spiller.cpp index 56bcb2824a..245dc8e9e5 100644 --- a/lib/CodeGen/Spiller.cpp +++ b/lib/CodeGen/Spiller.cpp @@ -193,10 +193,10 @@ namespace { class StandardSpiller : public Spiller { protected: LiveIntervals *lis; - const MachineLoopInfo *loopInfo; + MachineLoopInfo *loopInfo; VirtRegMap *vrm; public: - StandardSpiller(LiveIntervals *lis, const MachineLoopInfo *loopInfo, + StandardSpiller(LiveIntervals *lis, MachineLoopInfo *loopInfo, VirtRegMap *vrm) : lis(lis), loopInfo(loopInfo), vrm(vrm) {} @@ -222,7 +222,7 @@ namespace { class SplittingSpiller : public StandardSpiller { public: SplittingSpiller(MachineFunction *mf, LiveIntervals *lis, - const MachineLoopInfo *loopInfo, VirtRegMap *vrm) + MachineLoopInfo *loopInfo, VirtRegMap *vrm) : StandardSpiller(lis, loopInfo, vrm) { mri = &mf->getRegInfo(); @@ -508,12 +508,12 @@ private: namespace llvm { Spiller *createInlineSpiller(MachineFunction*, LiveIntervals*, - const MachineLoopInfo*, + MachineLoopInfo*, VirtRegMap*); } llvm::Spiller* llvm::createSpiller(MachineFunction *mf, LiveIntervals *lis, - const MachineLoopInfo *loopInfo, + MachineLoopInfo *loopInfo, VirtRegMap *vrm) { switch (spillerOpt) { default: assert(0 && "unknown spiller"); diff --git a/lib/CodeGen/Spiller.h b/lib/CodeGen/Spiller.h index 450447b393..b907f21db8 100644 --- a/lib/CodeGen/Spiller.h +++ b/lib/CodeGen/Spiller.h @@ -51,7 +51,7 @@ namespace llvm { /// Create and return a spiller object, as specified on the command line. Spiller* createSpiller(MachineFunction *mf, LiveIntervals *li, - const MachineLoopInfo *loopInfo, VirtRegMap *vrm); + MachineLoopInfo *loopInfo, VirtRegMap *vrm); } #endif -- cgit v1.2.3