remove #ifdef HAVE_CONFIG_Hs
[libfirm] / ir / be / bera.c
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief       Base routines for register allocation.
23  * @author      Sebastian Hack
24  * @date        22.11.2004
25  * @version     $Id$
26  */
27 #include "config.h"
28
29 #include <stdlib.h>
30
31 #include "pset.h"
32 #include "impl.h"
33
34 #include "irnode.h"
35 #include "irmode.h"
36 #include "irdom.h"
37 #include "iredges.h"
38
39 #include "bera.h"
40 #include "beutil.h"
41 #include "besched_t.h"
42 #include "belive_t.h"
43 #include "bemodule.h"
44
45 /** The list of register allocators */
46 static be_module_list_entry_t *register_allocators = NULL;
47 static be_ra_t *selected_allocator = NULL;
48
49 void be_register_allocator(const char *name, be_ra_t *allocator)
50 {
51         if(selected_allocator == NULL)
52                 selected_allocator = allocator;
53         be_add_module_to_list(&register_allocators, name, allocator);
54 }
55
56 void be_allocate_registers(be_irg_t *birg)
57 {
58         assert(selected_allocator != NULL);
59         if(selected_allocator != NULL) {
60                 selected_allocator->allocate(birg);
61         }
62 }
63
64 void be_init_ra(void)
65 {
66         lc_opt_entry_t *be_grp = lc_opt_get_grp(firm_opt_get_root(), "be");
67
68         be_add_module_list_opt(be_grp, "regalloc", "register allocator",
69                                &register_allocators, (void**) &selected_allocator);
70 }
71 BE_REGISTER_MODULE_CONSTRUCTOR(init_be_ra);