X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbecopyilp_t.h;h=7d817456ce0518966bf897c7c47eaa0d5704c88c;hb=fef8dc3eff6468d7d65485af8e1ac9884c504e1a;hp=54869c592a7843217c568821cc0f196b67dda10b;hpb=cf1b80f011e13db29e6b99ac25aa4c1ad055b2ff;p=libfirm diff --git a/ir/be/becopyilp_t.h b/ir/be/becopyilp_t.h index 54869c592..7d817456c 100644 --- a/ir/be/becopyilp_t.h +++ b/ir/be/becopyilp_t.h @@ -1,41 +1,140 @@ -/** - * Author: Daniel Grund - * Date: 28.02.2006 - * Copyright: (c) Universitaet Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. +/* + * Copyright (C) 1995-2008 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. * - * Common stuff used by all ILP fomulations. + * 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. */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#ifdef HAVE_ALLOCA_H -#include -#endif -#ifdef HAVE_MALLOC_H -#include -#endif +/** + * @file + * @brief Common stuff used by all ILP formulations. + * @author Daniel Grund + * @date 28.02.2006 + */ +#ifndef FIRM_BE_BECOPYILP_T_H +#define FIRM_BE_BECOPYILP_T_H -#include -#include -#include -#include -#include "xmalloc.h" +#include "firm_types.h" #include "pset.h" -#include "irprog.h" -#include "irdom_t.h" -#include "iredges_t.h" -#include "bechordal_t.h" #include "becopyopt_t.h" -#include "becopystat.h" -#include "besched_t.h" -#include "phiclass.h" -#define LPP_HOST "i44pc52" -#define LPP_SOLVER "cplex" +/****************************************************************************** + _____ _ _ _ _ + / ____(_) | | | | (_) + | (___ _ _______ _ __ ___ __| |_ _ ___| |_ _ ___ _ __ + \___ \| |_ / _ \ | '__/ _ \/ _` | | | |/ __| __| |/ _ \| '_ \ + ____) | |/ / __/ | | | __/ (_| | |_| | (__| |_| | (_) | | | | + |_____/|_/___\___| |_| \___|\__,_|\__,_|\___|\__|_|\___/|_| |_| + + *****************************************************************************/ + +typedef struct coloring_suffix_t coloring_suffix_t; + +struct coloring_suffix_t { + coloring_suffix_t *next; + ir_node *irn; +}; + +typedef struct size_red_t { + copy_opt_t *co; + pset *all_removed; /**< All nodes removed during problem size reduction */ + coloring_suffix_t *col_suff; /**< Coloring suffix. Reverse would be a PEO prefix */ + struct obstack ob; +} size_red_t; + +/** + * Just prepare. Do nothing yet. + */ +size_red_t *new_size_red(copy_opt_t *co); + +/** + * Checks if a node has already been removed + */ +#define sr_is_removed(sr, irn) pset_find_ptr((sr)->all_removed, irn) + +/** + * Virtually remove all nodes not related to the problem + * (simplicial AND not adjacent to a equal-color-edge) + */ +void sr_remove(size_red_t *sr); + +/** + * Virtually reinsert the nodes removed before and color them + */ +void sr_reinsert(size_red_t *sr); + +/** + * Free all space... + */ +void free_size_red(size_red_t *sr); + +/** + * TODO: This search is necessary because during the construction of the + * units (ou's) args could be merged and weights are accumulated. + * Is this necessary? + */ +static inline int co_ilp_get_costs(copy_opt_t *co, ir_node *root, ir_node *arg) { + int i; + + /* search optimization unit for phi */ + list_for_each_entry(unit_t, curr, &co->units, units) + if (curr->nodes[0] == root) { + + for (i = 1; i < curr->node_count; ++i) + if (curr->nodes[i] == arg) + return curr->costs[i]; + + assert(0 && "irn must occur in this ou"); + } + + assert(0 && "phi must be found in a ou"); + return 0; +} + +/****************************************************************************** + _____ _ _____ _ _____ + / ____| (_) |_ _| | | __ \ + | | __ ___ _ __ ___ _ __ _ ___ | | | | | |__) | + | | |_ |/ _ \ '_ \ / _ \ '__| |/ __| | | | | | ___/ + | |__| | __/ | | | __/ | | | (__ _| |_| |____| | + \_____|\___|_| |_|\___|_| |_|\___| |_____|______|_| + + *****************************************************************************/ + +#include "lpp.h" +#include "lpp_net.h" -#define MAX(a,b) ((a