Spillers may alter MachineLoopInfo when breaking critical edges, so make it
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 19 Jul 2010 18:41:20 +0000 (18:41 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Mon, 19 Jul 2010 18:41:20 +0000 (18:41 +0000)
non-const.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108734 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/InlineSpiller.cpp
lib/CodeGen/RegAllocLinearScan.cpp
lib/CodeGen/Spiller.cpp
lib/CodeGen/Spiller.h

index 12adcaa3a22ee2c9a6cc7ebeaeaf6f525798ebfb..3c6c761b3849b8048ddeb72f9f0cf166a0f12d6a 100644 (file)
@@ -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);
 }
 }
 
index 47863e3472381684c5b7ec74648831967aabcb91..98200af0cf00d4c7b681b6346a3f2730fc8c498e 100644 (file)
@@ -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) {
index 56bcb2824ae8afb442945e556e19f1919c8d2eab..245dc8e9e51b4262280503cb1537deb333876f49 100644 (file)
@@ -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");
index 450447b3933a85f705e1ca411c53143c2dbefc3d..b907f21db850845df0c36976e2d30171bab4b5a2 100644 (file)
@@ -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