blob: b9859d72a3e49314016fba52eedfb6d9221fe89b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
/*
* Copyright © 2012 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Author: Benjamin Segovia <benjamin.segovia@intel.com>
*/
/**
* \file gen_reg_allocation.hpp
* \author Benjamin Segovia <benjamin.segovia@intel.com>
*/
#ifndef __GBE_GEN_REG_ALLOCATION_HPP__
#define __GBE_GEN_REG_ALLOCATION_HPP__
#include "ir/register.hpp"
#include "backend/gen_register.hpp"
namespace gbe
{
class Selection; // Pre-register allocation code generation
class GenRegister; // Pre-register allocation Gen register
class GenRegInterval; // Liveness interval for each register
class GenContext; // Gen specific context
/*! Register allocate (i.e. virtual to physical register mapping) */
class GenRegAllocator
{
public:
/*! Initialize the register allocator */
GenRegAllocator(GenContext &ctx);
/*! Release all taken resources */
~GenRegAllocator(void);
/*! Perform the register allocation */
bool allocate(Selection &selection);
/*! Virtual to physical translation */
GenRegister genReg(const GenRegister ®);
/*! Output the register allocation */
void outputAllocation(void);
private:
/*! Actual implementation of the register allocator (use Pimpl) */
class Opaque;
/*! Created and destroyed in cpp */
Opaque *opaque;
/*! Use custom allocator */
GBE_CLASS(GenRegAllocator);
};
} /* namespace gbe */
#endif /* __GBE_GEN_REG_ALLOCATION_HPP__ */
|