From: Jakob Stoklund Olesen Date: Mon, 19 Jul 2010 18:41:20 +0000 (+0000) Subject: Spillers may alter MachineLoopInfo when breaking critical edges, so make it X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9529a1c3dd9946c1e63075f4bf146a731769ebe2;p=oota-llvm.git 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 --- diff --git a/lib/CodeGen/InlineSpiller.cpp b/lib/CodeGen/InlineSpiller.cpp index 12adcaa3a22..3c6c761b384 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 47863e34723..98200af0cf0 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 56bcb2824ae..245dc8e9e51 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 450447b3933..b907f21db85 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