/*
- * Project: libFIRM
- * File name: ir/opt/gvn_pre.c
- * Purpose: Global Value Numbering Partial Redundancy Elimination
- * (VanDrunen Hosking 2004)
- * Author: Michael Beck, Rubino Geiss
- * Created:
- * CVS-ID: $Id$
- * Copyright: (c) 1998-2006 Universität 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.
*/
+/**
+ * @file
+ * @brief Global Value Numbering Partial Redundancy Elimination
+ * (VanDrunen Hosking 2004)
+ * @author Michael Beck, Rubino Geiss
+ * @version $Id$
+ * @summary
+ *
+ * Currently completely broken because our sets do NOT preserve
+ * the topological sort!
+ */
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#ifdef HAVE_MALLOC_H
-# include <malloc.h>
-#endif
-#ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-#endif
+#include "iroptimize.h"
#include <assert.h>
#include "ircons.h"
#include "irgmod.h"
#include "debug.h"
-#include "gvn_pre.h"
+#include "xmalloc.h"
/** The debug module handle. */
DEBUG_ONLY(static firm_dbg_module_t *dbg;)
return pset_count(set);
}
+#if 0
/** computes dst = dst \/ src for node sets */
static void node_union(node_set *dst, node_set *src)
{
ir_node *entry;
- node_set_foreach(entry, src)
+ node_set_foreach(entry, src) {
node_add(dst, entry);
+ }
}
+#endif
/**
* Lookup a node in a node set.
{
const value_entry *e1 = elt;
const value_entry *e2 = key;
+ (void) size;
return identities_cmp(e1->value, e2->value);
}
node might depend on that. */
copy_node_attr(node, nn);
res = node_add(env->trans_set, nn);
- if (nn != res)
+ if (nn != res) {
obstack_free(env->obst, nn);
- else
+ } else {
DB((dbg, LEVEL_2, "--> Translate %+F in <%+F,%d> into %+F\n", node, block, pos, res));
+ }
+
return res;
}
return node;
}
+#if 0
/**
* Implements phi_translate.
*/
return res;
} /* phi_translate */
+#endif
/**
* Implements phi_translate.
ir_node *nn, *res;
int i, arity;
struct obstack *old;
- ir_node *pred_block = get_Block_cfgpred_block(block, pos);
- block_info *pred_info = get_block_info(pred_block);
if (is_Phi(node)) {
if (get_irn_intra_n(node, -1) == block)
}
// clean_node_set(info->antic_in, block);
+ (void) clean_node_set;
dump_node_set(info->antic_in, "Antic_in", block);
if (size != node_set_count(info->antic_in)) {
value_set_foreach(entry, idom_info->new_set) {
updated |= value_add_or_replace(curr_info->avail_out, entry->node, entry->value);
}
- if (updated)
+ if (updated) {
dump_value_set(curr_info->avail_out, "Updated [Avail_out]", block);
+ }
if (arity <= 1)
return;
/*
* Argh: Endless loops cause problems, because the
- * insert algorithm did not terminate. We get tranalated nodes that
+ * insert algorithm did not terminate. We get translated nodes that
* references the origin. These nodes are translated again and again...
*
* The current fix is to use post-dominance. This simple ignores
block_info *p;
unsigned antic_iter, insert_iter;
+ assert(!"COMPLETELY BROKEN YET, DO NOT USE");
+
/* register a debug mask */
FIRM_DBG_REGISTER(dbg, "firm.opt.gvn_pre");
firm_dbg_set_mask(dbg, SET_LEVEL_2);