LLVM 20.0.0git
PBQPRAConstraint.h
Go to the documentation of this file.
1//===- llvm/CodeGen/PBQPRAConstraint.h --------------------------*- 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// This file defines the PBQPBuilder interface, for classes which build PBQP
10// instances to represent register allocation problems, and the RegAllocPBQP
11// interface.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_CODEGEN_PBQPRACONSTRAINT_H
16#define LLVM_CODEGEN_PBQPRACONSTRAINT_H
17
18#include <algorithm>
19#include <memory>
20#include <vector>
21
22namespace llvm {
23
24namespace PBQP {
25namespace RegAlloc {
26
27// Forward declare PBQP graph class.
28class PBQPRAGraph;
29
30} // end namespace RegAlloc
31} // end namespace PBQP
32
34
35/// Abstract base for classes implementing PBQP register allocation
36/// constraints (e.g. Spill-costs, interference, coalescing).
38public:
39 virtual ~PBQPRAConstraint() = 0;
40 virtual void apply(PBQPRAGraph &G) = 0;
41
42private:
43 virtual void anchor();
44};
45
46/// PBQP register allocation constraint composer.
47///
48/// Constraints added to this list will be applied, in the order that they are
49/// added, to the PBQP graph.
51public:
52 void apply(PBQPRAGraph &G) override {
53 for (auto &C : Constraints)
54 C->apply(G);
55 }
56
57 void addConstraint(std::unique_ptr<PBQPRAConstraint> C) {
58 if (C)
59 Constraints.push_back(std::move(C));
60 }
61
62private:
63 std::vector<std::unique_ptr<PBQPRAConstraint>> Constraints;
64
65 void anchor() override;
66};
67
68} // end namespace llvm
69
70#endif // LLVM_CODEGEN_PBQPRACONSTRAINT_H
#define G(x, y, z)
Definition: MD5.cpp:56
static cl::opt< RegisterRegAlloc::FunctionPassCtor, false, RegisterPassParser< RegisterRegAlloc > > RegAlloc("regalloc", cl::Hidden, cl::init(&useDefaultRegisterAllocator), cl::desc("Register allocator to use"))
PBQP register allocation constraint composer.
void addConstraint(std::unique_ptr< PBQPRAConstraint > C)
void apply(PBQPRAGraph &G) override
Abstract base for classes implementing PBQP register allocation constraints (e.g.
virtual ~PBQPRAConstraint()=0
virtual void apply(PBQPRAGraph &G)=0
@ C
The default llvm calling convention, compatible with C.
Definition: CallingConv.h:34
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18