1e2b201bac382464496758d789cddefa50690fbe3Lang Hames//===-- llvm/CodeGen/Spiller.h - Spiller -*- C++ -*------------------------===//
2e2b201bac382464496758d789cddefa50690fbe3Lang Hames//
3e2b201bac382464496758d789cddefa50690fbe3Lang Hames//                     The LLVM Compiler Infrastructure
4e2b201bac382464496758d789cddefa50690fbe3Lang Hames//
5e2b201bac382464496758d789cddefa50690fbe3Lang Hames// This file is distributed under the University of Illinois Open Source
6e2b201bac382464496758d789cddefa50690fbe3Lang Hames// License. See LICENSE.TXT for details.
7e2b201bac382464496758d789cddefa50690fbe3Lang Hames//
8e2b201bac382464496758d789cddefa50690fbe3Lang Hames//===----------------------------------------------------------------------===//
9e2b201bac382464496758d789cddefa50690fbe3Lang Hames
10e2b201bac382464496758d789cddefa50690fbe3Lang Hames#ifndef LLVM_CODEGEN_SPILLER_H
11e2b201bac382464496758d789cddefa50690fbe3Lang Hames#define LLVM_CODEGEN_SPILLER_H
12e2b201bac382464496758d789cddefa50690fbe3Lang Hames
13e2b201bac382464496758d789cddefa50690fbe3Lang Hamesnamespace llvm {
1410382fb71d8306f320ecbeb7049d25354c0e5457Lang Hames
1547dbf6cef761c25cfeb0aa7d624a6f98288bb96aJakob Stoklund Olesen  class LiveRangeEdit;
16cd35ed5153963c92333aa8d82692f1344d3ec911Bill Wendling  class MachineFunction;
17f2c6e367c1c0d8797e62e58a3ccdb8cceee27987Jakob Stoklund Olesen  class MachineFunctionPass;
1810382fb71d8306f320ecbeb7049d25354c0e5457Lang Hames  class VirtRegMap;
19e2b201bac382464496758d789cddefa50690fbe3Lang Hames
20e2b201bac382464496758d789cddefa50690fbe3Lang Hames  /// Spiller interface.
21e2b201bac382464496758d789cddefa50690fbe3Lang Hames  ///
22e2b201bac382464496758d789cddefa50690fbe3Lang Hames  /// Implementations are utility classes which insert spill or remat code on
23e2b201bac382464496758d789cddefa50690fbe3Lang Hames  /// demand.
24e2b201bac382464496758d789cddefa50690fbe3Lang Hames  class Spiller {
252d24e2a396a1d211baaeedf32148a3b657240170David Blaikie    virtual void anchor();
26e2b201bac382464496758d789cddefa50690fbe3Lang Hames  public:
27e2b201bac382464496758d789cddefa50690fbe3Lang Hames    virtual ~Spiller() = 0;
28857c4e01f85601cf2084adb860616256ee47c177Lang Hames
2947dbf6cef761c25cfeb0aa7d624a6f98288bb96aJakob Stoklund Olesen    /// spill - Spill the LRE.getParent() live interval.
3047dbf6cef761c25cfeb0aa7d624a6f98288bb96aJakob Stoklund Olesen    virtual void spill(LiveRangeEdit &LRE) = 0;
31857c4e01f85601cf2084adb860616256ee47c177Lang Hames
32e2b201bac382464496758d789cddefa50690fbe3Lang Hames  };
33e2b201bac382464496758d789cddefa50690fbe3Lang Hames
34e2b201bac382464496758d789cddefa50690fbe3Lang Hames  /// Create and return a spiller object, as specified on the command line.
35f2c6e367c1c0d8797e62e58a3ccdb8cceee27987Jakob Stoklund Olesen  Spiller* createSpiller(MachineFunctionPass &pass,
36f2c6e367c1c0d8797e62e58a3ccdb8cceee27987Jakob Stoklund Olesen                         MachineFunction &mf,
37f2c6e367c1c0d8797e62e58a3ccdb8cceee27987Jakob Stoklund Olesen                         VirtRegMap &vrm);
38f6dff84d4e44d6c4a46c4f8a18e13c78f804547cJakob Stoklund Olesen
39f6dff84d4e44d6c4a46c4f8a18e13c78f804547cJakob Stoklund Olesen  /// Create and return a spiller that will insert spill code directly instead
40f6dff84d4e44d6c4a46c4f8a18e13c78f804547cJakob Stoklund Olesen  /// of deferring though VirtRegMap.
41f6dff84d4e44d6c4a46c4f8a18e13c78f804547cJakob Stoklund Olesen  Spiller *createInlineSpiller(MachineFunctionPass &pass,
42f6dff84d4e44d6c4a46c4f8a18e13c78f804547cJakob Stoklund Olesen                               MachineFunction &mf,
43f6dff84d4e44d6c4a46c4f8a18e13c78f804547cJakob Stoklund Olesen                               VirtRegMap &vrm);
44f6dff84d4e44d6c4a46c4f8a18e13c78f804547cJakob Stoklund Olesen
45e2b201bac382464496758d789cddefa50690fbe3Lang Hames}
46e2b201bac382464496758d789cddefa50690fbe3Lang Hames
47e2b201bac382464496758d789cddefa50690fbe3Lang Hames#endif
48