[llvm] r221474 - [RegAlloc] Kill off the trivial spiller - nobody is using it any more.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Thu Nov 6 12:24:41 PST 2014


Nice :-)

On 6 November 2014 14:12, Lang Hames <lhames at gmail.com> wrote:
> Author: lhames
> Date: Thu Nov  6 13:12:38 2014
> New Revision: 221474
>
> URL: http://llvm.org/viewvc/llvm-project?rev=221474&view=rev
> Log:
> [RegAlloc] Kill off the trivial spiller - nobody is using it any more.
>
> Removed:
>     llvm/trunk/lib/CodeGen/Spiller.cpp
> Modified:
>     llvm/trunk/lib/CodeGen/CMakeLists.txt
>     llvm/trunk/lib/CodeGen/InlineSpiller.cpp
>     llvm/trunk/lib/CodeGen/Spiller.h
>
> Modified: llvm/trunk/lib/CodeGen/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/CMakeLists.txt?rev=221474&r1=221473&r2=221474&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/CMakeLists.txt (original)
> +++ llvm/trunk/lib/CodeGen/CMakeLists.txt Thu Nov  6 13:12:38 2014
> @@ -97,7 +97,6 @@ add_llvm_library(LLVMCodeGen
>    SjLjEHPrepare.cpp
>    SlotIndexes.cpp
>    SpillPlacement.cpp
> -  Spiller.cpp
>    SplitKit.cpp
>    StackColoring.cpp
>    StackProtector.cpp
>
> Modified: llvm/trunk/lib/CodeGen/InlineSpiller.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/InlineSpiller.cpp?rev=221474&r1=221473&r2=221474&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/InlineSpiller.cpp (original)
> +++ llvm/trunk/lib/CodeGen/InlineSpiller.cpp Thu Nov  6 13:12:38 2014
> @@ -184,11 +184,16 @@ private:
>  }
>
>  namespace llvm {
> +
> +Spiller::~Spiller() { }
> +void Spiller::anchor() { }
> +
>  Spiller *createInlineSpiller(MachineFunctionPass &pass,
>                               MachineFunction &mf,
>                               VirtRegMap &vrm) {
>    return new InlineSpiller(pass, mf, vrm);
>  }
> +
>  }
>
>  //===----------------------------------------------------------------------===//
>
> Removed: llvm/trunk/lib/CodeGen/Spiller.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Spiller.cpp?rev=221473&view=auto
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/Spiller.cpp (original)
> +++ llvm/trunk/lib/CodeGen/Spiller.cpp (removed)
> @@ -1,183 +0,0 @@
> -//===-- llvm/CodeGen/Spiller.cpp -  Spiller -------------------------------===//
> -//
> -//                     The LLVM Compiler Infrastructure
> -//
> -// This file is distributed under the University of Illinois Open Source
> -// License. See LICENSE.TXT for details.
> -//
> -//===----------------------------------------------------------------------===//
> -
> -#include "Spiller.h"
> -#include "llvm/CodeGen/LiveIntervalAnalysis.h"
> -#include "llvm/CodeGen/LiveRangeEdit.h"
> -#include "llvm/CodeGen/LiveStackAnalysis.h"
> -#include "llvm/CodeGen/MachineFrameInfo.h"
> -#include "llvm/CodeGen/MachineFunction.h"
> -#include "llvm/CodeGen/MachineInstrBuilder.h"
> -#include "llvm/CodeGen/MachineLoopInfo.h"
> -#include "llvm/CodeGen/MachineRegisterInfo.h"
> -#include "llvm/CodeGen/VirtRegMap.h"
> -#include "llvm/Support/CommandLine.h"
> -#include "llvm/Support/Debug.h"
> -#include "llvm/Support/ErrorHandling.h"
> -#include "llvm/Support/raw_ostream.h"
> -#include "llvm/Target/TargetInstrInfo.h"
> -
> -using namespace llvm;
> -
> -#define DEBUG_TYPE "spiller"
> -
> -namespace {
> -  enum SpillerName { trivial, inline_ };
> -}
> -
> -static cl::opt<SpillerName>
> -spillerOpt("spiller",
> -           cl::desc("Spiller to use: (default: standard)"),
> -           cl::Prefix,
> -           cl::values(clEnumVal(trivial,   "trivial spiller"),
> -                      clEnumValN(inline_,  "inline", "inline spiller"),
> -                      clEnumValEnd),
> -           cl::init(trivial));
> -
> -// Spiller virtual destructor implementation.
> -Spiller::~Spiller() {}
> -
> -namespace {
> -
> -/// Utility class for spillers.
> -class SpillerBase : public Spiller {
> -protected:
> -  MachineFunctionPass *pass;
> -  MachineFunction *mf;
> -  VirtRegMap *vrm;
> -  LiveIntervals *lis;
> -  MachineFrameInfo *mfi;
> -  MachineRegisterInfo *mri;
> -  const TargetInstrInfo *tii;
> -  const TargetRegisterInfo *tri;
> -
> -  /// Construct a spiller base.
> -  SpillerBase(MachineFunctionPass &pass, MachineFunction &mf, VirtRegMap &vrm)
> -    : pass(&pass), mf(&mf), vrm(&vrm)
> -  {
> -    lis = &pass.getAnalysis<LiveIntervals>();
> -    mfi = mf.getFrameInfo();
> -    mri = &mf.getRegInfo();
> -    tii = mf.getSubtarget().getInstrInfo();
> -    tri = mf.getSubtarget().getRegisterInfo();
> -  }
> -
> -  /// Add spill ranges for every use/def of the live interval, inserting loads
> -  /// immediately before each use, and stores after each def. No folding or
> -  /// remat is attempted.
> -  void trivialSpillEverywhere(LiveRangeEdit& LRE) {
> -    LiveInterval* li = &LRE.getParent();
> -
> -    DEBUG(dbgs() << "Spilling everywhere " << *li << "\n");
> -
> -    assert(li->weight != llvm::huge_valf &&
> -           "Attempting to spill already spilled value.");
> -
> -    assert(!TargetRegisterInfo::isStackSlot(li->reg) &&
> -           "Trying to spill a stack slot.");
> -
> -    DEBUG(dbgs() << "Trivial spill everywhere of reg" << li->reg << "\n");
> -
> -    const TargetRegisterClass *trc = mri->getRegClass(li->reg);
> -    unsigned ss = vrm->assignVirt2StackSlot(li->reg);
> -
> -    // Iterate over reg uses/defs.
> -    for (MachineRegisterInfo::reg_instr_iterator
> -         regItr = mri->reg_instr_begin(li->reg);
> -         regItr != mri->reg_instr_end();) {
> -
> -      // Grab the use/def instr.
> -      MachineInstr *mi = &*regItr;
> -
> -      DEBUG(dbgs() << "  Processing " << *mi);
> -
> -      // Step regItr to the next use/def instr.
> -      ++regItr;
> -
> -      // Collect uses & defs for this instr.
> -      SmallVector<unsigned, 2> indices;
> -      bool hasUse = false;
> -      bool hasDef = false;
> -      for (unsigned i = 0; i != mi->getNumOperands(); ++i) {
> -        MachineOperand &op = mi->getOperand(i);
> -        if (!op.isReg() || op.getReg() != li->reg)
> -          continue;
> -        hasUse |= mi->getOperand(i).isUse();
> -        hasDef |= mi->getOperand(i).isDef();
> -        indices.push_back(i);
> -      }
> -
> -      // Create a new virtual register for the load and/or store.
> -      unsigned NewVReg = LRE.create();
> -
> -      // Update the reg operands & kill flags.
> -      for (unsigned i = 0; i < indices.size(); ++i) {
> -        unsigned mopIdx = indices[i];
> -        MachineOperand &mop = mi->getOperand(mopIdx);
> -        mop.setReg(NewVReg);
> -        if (mop.isUse() && !mi->isRegTiedToDefOperand(mopIdx)) {
> -          mop.setIsKill(true);
> -        }
> -      }
> -      assert(hasUse || hasDef);
> -
> -      // Insert reload if necessary.
> -      MachineBasicBlock::iterator miItr(mi);
> -      if (hasUse) {
> -        MachineInstrSpan MIS(miItr);
> -
> -        tii->loadRegFromStackSlot(*mi->getParent(), miItr, NewVReg, ss, trc,
> -                                  tri);
> -        lis->InsertMachineInstrRangeInMaps(MIS.begin(), miItr);
> -      }
> -
> -      // Insert store if necessary.
> -      if (hasDef) {
> -        MachineInstrSpan MIS(miItr);
> -
> -        tii->storeRegToStackSlot(*mi->getParent(), std::next(miItr), NewVReg,
> -                                 true, ss, trc, tri);
> -        lis->InsertMachineInstrRangeInMaps(std::next(miItr), MIS.end());
> -      }
> -    }
> -  }
> -};
> -
> -} // end anonymous namespace
> -
> -namespace {
> -
> -/// Spills any live range using the spill-everywhere method with no attempt at
> -/// folding.
> -class TrivialSpiller : public SpillerBase {
> -public:
> -
> -  TrivialSpiller(MachineFunctionPass &pass, MachineFunction &mf,
> -                 VirtRegMap &vrm)
> -    : SpillerBase(pass, mf, vrm) {}
> -
> -  void spill(LiveRangeEdit &LRE) override {
> -    // Ignore spillIs - we don't use it.
> -    trivialSpillEverywhere(LRE);
> -  }
> -};
> -
> -} // end anonymous namespace
> -
> -void Spiller::anchor() { }
> -
> -llvm::Spiller* llvm::createSpiller(MachineFunctionPass &pass,
> -                                   MachineFunction &mf,
> -                                   VirtRegMap &vrm) {
> -  switch (spillerOpt) {
> -  case trivial: return new TrivialSpiller(pass, mf, vrm);
> -  case inline_: return createInlineSpiller(pass, mf, vrm);
> -  }
> -  llvm_unreachable("Invalid spiller optimization");
> -}
>
> Modified: llvm/trunk/lib/CodeGen/Spiller.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Spiller.h?rev=221474&r1=221473&r2=221474&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/Spiller.h (original)
> +++ llvm/trunk/lib/CodeGen/Spiller.h Thu Nov  6 13:12:38 2014
> @@ -31,11 +31,6 @@ namespace llvm {
>
>    };
>
> -  /// Create and return a spiller object, as specified on the command line.
> -  Spiller* createSpiller(MachineFunctionPass &pass,
> -                         MachineFunction &mf,
> -                         VirtRegMap &vrm);
> -
>    /// Create and return a spiller that will insert spill code directly instead
>    /// of deferring though VirtRegMap.
>    Spiller *createInlineSpiller(MachineFunctionPass &pass,
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list