libcore: Check, that a pointer to a char array is passed to LC_OPT_ENT_STR().
[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  */
26 #include "config.h"
27
28 #include <stdlib.h>
29
30 #include "pset.h"
31
32 #include "irnode.h"
33 #include "irmode.h"
34 #include "irdom.h"
35 #include "iredges.h"
36 #include "irtools.h"
37
38 #include "bera.h"
39 #include "beutil.h"
40 #include "besched.h"
41 #include "belive_t.h"
42 #include "bemodule.h"
43
44 /** The list of register allocators */
45 static be_module_list_entry_t *register_allocators = NULL;
46 static be_ra_t *selected_allocator = NULL;
47
48 void be_register_allocator(const char *name, be_ra_t *allocator)
49 {
50         if (selected_allocator == NULL)
51                 selected_allocator = allocator;
52         be_add_module_to_list(&register_allocators, name, allocator);
53 }
54
55 void be_allocate_registers(ir_graph *irg)
56 {
57         assert(selected_allocator != NULL);
58         if (selected_allocator != NULL) {
59                 selected_allocator->allocate(irg);
60         }
61 }
62
63 BE_REGISTER_MODULE_CONSTRUCTOR(be_init_ra)
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 }