File indexing completed on 2026-05-10 08:43:36
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLVM_CODEGEN_SPILLER_H
0010 #define LLVM_CODEGEN_SPILLER_H
0011
0012 #include "llvm/ADT/ArrayRef.h"
0013 #include "llvm/CodeGen/Register.h"
0014
0015 namespace llvm {
0016
0017 class LiveRangeEdit;
0018 class MachineFunction;
0019 class MachineFunctionPass;
0020 class VirtRegMap;
0021 class VirtRegAuxInfo;
0022 class LiveIntervals;
0023 class LiveStacks;
0024 class MachineDominatorTree;
0025 class MachineBlockFrequencyInfo;
0026
0027
0028
0029
0030
0031 class Spiller {
0032 virtual void anchor();
0033
0034 public:
0035 virtual ~Spiller() = 0;
0036
0037
0038 virtual void spill(LiveRangeEdit &LRE) = 0;
0039
0040
0041 virtual ArrayRef<Register> getSpilledRegs() = 0;
0042
0043
0044
0045 virtual ArrayRef<Register> getReplacedRegs() = 0;
0046
0047 virtual void postOptimization() {}
0048
0049 struct RequiredAnalyses {
0050 LiveIntervals &LIS;
0051 LiveStacks &LSS;
0052 MachineDominatorTree &MDT;
0053 const MachineBlockFrequencyInfo &MBFI;
0054 };
0055 };
0056
0057
0058
0059 Spiller *createInlineSpiller(const Spiller::RequiredAnalyses &Analyses,
0060 MachineFunction &MF, VirtRegMap &VRM,
0061 VirtRegAuxInfo &VRAI);
0062
0063 }
0064
0065 #endif