blob: a693d64858f9e11878152097b0465e7c67630b22 [file] [log] [blame]
Olivier Deprezf4ef2d02021-04-20 13:36:24 +02001//===- llvm/CodeGen/Spiller.h - Spiller -------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_LIB_CODEGEN_SPILLER_H
10#define LLVM_LIB_CODEGEN_SPILLER_H
11
12namespace llvm {
13
14class LiveRangeEdit;
15class MachineFunction;
16class MachineFunctionPass;
17class VirtRegMap;
18
19/// Spiller interface.
20///
21/// Implementations are utility classes which insert spill or remat code on
22/// demand.
23class Spiller {
24 virtual void anchor();
25
26public:
27 virtual ~Spiller() = 0;
28
29 /// spill - Spill the LRE.getParent() live interval.
30 virtual void spill(LiveRangeEdit &LRE) = 0;
31
32 virtual void postOptimization() {}
33};
34
35/// Create and return a spiller that will insert spill code directly instead
36/// of deferring though VirtRegMap.
37Spiller *createInlineSpiller(MachineFunctionPass &pass, MachineFunction &mf,
38 VirtRegMap &vrm);
39
40} // end namespace llvm
41
42#endif // LLVM_LIB_CODEGEN_SPILLER_H