refactor time measurement
[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 #ifdef HAVE_CONFIG_H
28 #include "config.h"
29 #endif
30
31 #include <stdlib.h>
32
33 #include "pset.h"
34 #include "impl.h"
35
36 #include "irnode.h"
37 #include "irmode.h"
38 #include "irdom.h"
39 #include "iredges.h"
40
41 #include "bera.h"
42 #include "beutil.h"
43 #include "besched_t.h"
44 #include "belive_t.h"
45 #include "bemodule.h"
46
47 /** The list of register allocators */
48 static be_module_list_entry_t *register_allocators = NULL;
49 static be_ra_t *selected_allocator = NULL;
50
51 void be_register_allocator(const char *name, be_ra_t *allocator)
52 {
53         if(selected_allocator == NULL)
54                 selected_allocator = allocator;
55         be_add_module_to_list(&register_allocators, name, allocator);
56 }
57
58 void be_allocate_registers(be_irg_t *birg)
59 {
60         assert(selected_allocator != NULL);
61         if(selected_allocator != NULL) {
62                 selected_allocator->allocate(birg);
63         }
64 }
65
66 void be_init_ra(void)
67 {
68         lc_opt_entry_t *be_grp = lc_opt_get_grp(firm_opt_get_root(), "be");
69
70         be_add_module_list_opt(be_grp, "regalloc", "register allocator",
71                                &register_allocators, (void**) &selected_allocator);
72 }
73 BE_REGISTER_MODULE_CONSTRUCTOR(init_be_ra);