//===- llvm/CodeGen/Spiller.h - Spiller -------------------------*- C++ -*-===//
 
//
 
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 
// See https://llvm.org/LICENSE.txt for license information.
 
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
//
 
//===----------------------------------------------------------------------===//
 
 
 
#ifndef LLVM_CODEGEN_SPILLER_H
 
#define LLVM_CODEGEN_SPILLER_H
 
 
 
namespace llvm {
 
 
 
class LiveRangeEdit;
 
class MachineFunction;
 
class MachineFunctionPass;
 
class VirtRegMap;
 
class VirtRegAuxInfo;
 
 
 
/// Spiller interface.
 
///
 
/// Implementations are utility classes which insert spill or remat code on
 
/// demand.
 
class Spiller {
 
  virtual void anchor();
 
 
 
public:
 
  virtual ~Spiller() = 0;
 
 
 
  /// spill - Spill the LRE.getParent() live interval.
 
  virtual void spill(LiveRangeEdit &LRE) = 0;
 
 
 
  virtual void postOptimization() {}
 
};
 
 
 
/// Create and return a spiller that will insert spill code directly instead
 
/// of deferring though VirtRegMap.
 
Spiller *createInlineSpiller(MachineFunctionPass &Pass, MachineFunction &MF,
 
                             VirtRegMap &VRM, VirtRegAuxInfo &VRAI);
 
 
 
} // end namespace llvm
 
 
 
#endif // LLVM_CODEGEN_SPILLER_H