Renamed CCState members that appear to misspell 'Processed' as 'Proceed'. NFC.
[oota-llvm.git] / include / llvm / CodeGen / PBQPRAConstraint.h
1 //===-- RegAllocPBQP.h ------------------------------------------*- 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 // This file defines the PBQPBuilder interface, for classes which build PBQP
11 // instances to represent register allocation problems, and the RegAllocPBQP
12 // interface.
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef LLVM_CODEGEN_PBQPRACONSTRAINT_H
17 #define LLVM_CODEGEN_PBQPRACONSTRAINT_H
18
19 #include <memory>
20 #include <vector>
21
22 namespace llvm {
23 namespace PBQP {
24 namespace RegAlloc {
25 // Forward declare PBQP graph class.
26 class PBQPRAGraph;
27 }
28 }
29
30 class LiveIntervals;
31 class MachineBlockFrequencyInfo;
32 class MachineFunction;
33 class TargetRegisterInfo;
34
35 typedef PBQP::RegAlloc::PBQPRAGraph PBQPRAGraph;
36
37 /// @brief Abstract base for classes implementing PBQP register allocation
38 ///        constraints (e.g. Spill-costs, interference, coalescing).
39 class PBQPRAConstraint {
40 public:
41   virtual ~PBQPRAConstraint() = 0;
42   virtual void apply(PBQPRAGraph &G) = 0;
43 private:
44   virtual void anchor();
45 };
46
47 /// @brief PBQP register allocation constraint composer.
48 ///
49 ///   Constraints added to this list will be applied, in the order that they are
50 /// added, to the PBQP graph.
51 class PBQPRAConstraintList : public PBQPRAConstraint {
52 public:
53   void apply(PBQPRAGraph &G) override {
54     for (auto &C : Constraints)
55       C->apply(G);
56   }
57
58   void addConstraint(std::unique_ptr<PBQPRAConstraint> C) {
59     if (C)
60       Constraints.push_back(std::move(C));
61   }
62 private:
63   std::vector<std::unique_ptr<PBQPRAConstraint>> Constraints;
64   virtual void anchor() override;
65 };
66
67 }
68
69 #endif /* LLVM_CODEGEN_PBQPRACONSTRAINT_H */