X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbespill.h;h=89aec720342e13c67ae76a931d6b85fda1ebce4f;hb=dfc341ac6f54b4b0922d605e28333be76f487c68;hp=17eba7a2ab52fbc4546a6979fb314a632b38eae4;hpb=3643119efedce75d282f4a1938ebdcdac7011d33;p=libfirm diff --git a/ir/be/bespill.h b/ir/be/bespill.h index 17eba7a2a..89aec7203 100644 --- a/ir/be/bespill.h +++ b/ir/be/bespill.h @@ -1,28 +1,44 @@ /* - * Author: Daniel Grund, Sebastian Hack, Matthias Braun - * Date: 29.09.2005 - * Copyright: (c) Universitaet Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. */ -#ifndef BESPILL_H_ -#define BESPILL_H_ + +/** + * @file + * @brief Main spill driver. + * @author Daniel Grund, Sebastian Hack, Matthias Braun + * @date 29.09.2005 + * @version $Id$ + */ +#ifndef FIRM_BE_BESPILL_H +#define FIRM_BE_BESPILL_H #include "firm_types.h" -#include "set.h" -#include "pset.h" #include "debug.h" -#include "bechordal.h" -#include "be_t.h" - #include "bearch.h" +#include "beirg.h" typedef struct _spill_env_t spill_env_t; /** * Creates a new spill environment. */ -spill_env_t *be_new_spill_env(const be_chordal_env_t *chordal); +spill_env_t *be_new_spill_env(be_irg_t *birg); /** * Deletes a spill environment. @@ -40,13 +56,27 @@ DEBUG_ONLY(void be_set_spill_env_dbg_module(spill_env_t *env, firm_dbg_module_t * explicitly create spill nodes, they will be created automatically after * the definition of a value as soon as a reload is created. (we should add a * possibility for explicit spill placement in the future) + * + * @param senv The spill environment + * @param to_spill The node which is about to be spilled + * @param before The node before the reload should be added + * @param reload_cls The register class the reloaded value will be put into + * @param allow_remat Set to 1 if the node may be rematerialized instead of reloaded */ -void be_add_reload(spill_env_t *senv, ir_node *to_spill, ir_node *before, const arch_register_class_t *reload_cls); +void be_add_reload(spill_env_t *senv, ir_node *to_spill, ir_node *before, + const arch_register_class_t *reload_cls, int allow_remat); /** * Analog to be_add_reload, but places the reload "on an edge" between 2 blocks + * @see be_add_reload + */ +void be_add_reload_on_edge(spill_env_t *senv, ir_node *to_spill, ir_node *bl, int pos, + const arch_register_class_t *reload_cls, int allow_remat); + +/** + * Analog to be_add_reload but adds an already created rematerialized node. */ -void be_add_reload_on_edge(spill_env_t *senv, ir_node *to_spill, ir_node *bl, int pos, const arch_register_class_t *reload_cls); +void be_add_remat(spill_env_t *env, ir_node *to_spill, ir_node *before, ir_node *rematted_node); /** * The main function that places real spills/reloads (or rematerializes values) @@ -78,4 +108,4 @@ int be_get_reload_costs(spill_env_t *env, ir_node *to_spill, ir_node *before); */ int be_get_reload_costs_on_edge(spill_env_t *env, ir_node *to_spill, ir_node *block, int pos); -#endif +#endif /* FIRM_BE_BESPILL_H */