1//===-- llvm/CodeGen/Spiller.h - Spiller -*- C++ -*------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_LIB_CODEGEN_SPILLER_H
11#define LLVM_LIB_CODEGEN_SPILLER_H
12
13namespace llvm {
14
15  class LiveRangeEdit;
16  class MachineFunction;
17  class MachineFunctionPass;
18  class VirtRegMap;
19  class LiveIntervals;
20
21  /// Spiller interface.
22  ///
23  /// Implementations are utility classes which insert spill or remat code on
24  /// demand.
25  class Spiller {
26    virtual void anchor();
27  public:
28    virtual ~Spiller() = 0;
29
30    /// spill - Spill the LRE.getParent() live interval.
31    virtual void spill(LiveRangeEdit &LRE) = 0;
32    virtual void postOptimization(){};
33  };
34
35  /// Create and return a spiller that will insert spill code directly instead
36  /// of deferring though VirtRegMap.
37  Spiller *createInlineSpiller(MachineFunctionPass &pass,
38                               MachineFunction &mf,
39                               VirtRegMap &vrm);
40}
41
42#endif
43