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