From: Sebastian Hack Date: Wed, 15 Mar 2006 12:49:57 +0000 (+0000) Subject: Moved the survive dce stuff to irgopt.[ch] X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=2678572530582911ce1618059c1f67485dc2b2d3;p=libfirm Moved the survive dce stuff to irgopt.[ch] [r7446] --- diff --git a/ir/common/Makefile.in b/ir/common/Makefile.in index 0a8cc3286..29642effb 100644 --- a/ir/common/Makefile.in +++ b/ir/common/Makefile.in @@ -22,7 +22,7 @@ SOURCES = $(INSTALL_HEADERS) SOURCES += Makefile.in \ error.c firm_common.c firm.c firmwalk.c \ error.h firm_common_t.h statistics.c debug.c old_fctnames.h \ - irtools.c irtools.h survive_dce.c survive_dce.h + irtools.c irtools.h include $(topdir)/MakeRules diff --git a/ir/common/survive_dce.c b/ir/common/survive_dce.c deleted file mode 100644 index c574a25c0..000000000 --- a/ir/common/survive_dce.c +++ /dev/null @@ -1,85 +0,0 @@ - -#include "pmap.h" - -#include "irnode_t.h" -#include "irhooks.h" -#include "irgwalk.h" - -#include "survive_dce.h" - -struct _survive_dce_t { - pmap *places; - pmap *new_places; - hook_entry_t dead_node_elim; - hook_entry_t dead_node_elim_subst; -}; - -static void dead_node_hook(void *context, ir_graph *irg, int start) -{ - survive_dce_t *sd = context; - - /* Create a new map before the dead node elimination is performed. */ - if(start) { - sd->new_places = pmap_create_ex(pmap_count(sd->places)); - } - - /* Patch back all nodes if dead node elimination is over and something is to be done. */ - else { - pmap_destroy(sd->places); - sd->places = sd->new_places; - sd->new_places = NULL; - } -} - -static void dead_node_subst_hook(void *context, ir_graph *irg, ir_node *old, ir_node *nw) -{ - survive_dce_t *sd = context; - ir_node **place = (ir_node **) pmap_get(sd->places, old); - - /* If the node is to be patched back, do it. */ - if(place) { - *place = nw; - pmap_insert(sd->new_places, nw, (void *) place); - } -} - -survive_dce_t *new_survive_dce(void) -{ - survive_dce_t *res = xmalloc(sizeof(res[0])); - res->places = pmap_create(); - res->new_places = NULL; - - res->dead_node_elim.hook._hook_dead_node_elim = dead_node_hook; - res->dead_node_elim.context = res; - res->dead_node_elim.next = NULL; - - res->dead_node_elim_subst.hook._hook_dead_node_elim_subst = dead_node_subst_hook; - res->dead_node_elim_subst.context = res; - res->dead_node_elim_subst.next = NULL; - - register_hook(hook_dead_node_elim, &res->dead_node_elim); - register_hook(hook_dead_node_elim_subst, &res->dead_node_elim_subst); - return res; -} - -void free_survive_dce(survive_dce_t *sd) -{ - pmap_destroy(sd->places); - unregister_hook(hook_dead_node_elim, &sd->dead_node_elim); - unregister_hook(hook_dead_node_elim_subst, &sd->dead_node_elim_subst); - free(sd); -} - -void survive_dce_register_irn(survive_dce_t *sd, ir_node **place) -{ - if(*place != NULL) - pmap_insert(sd->places, *place, (void *) place); -} - -void survive_dce_register_pmap(survive_dce_t *sd, pmap *m) -{ - pmap_entry *ent; - - for(ent = pmap_first(m); ent; ent = pmap_next(m)) - survive_dce_register_irn(sd, (ir_node **) &ent->value); -} diff --git a/ir/common/survive_dce.h b/ir/common/survive_dce.h deleted file mode 100644 index 803b78859..000000000 --- a/ir/common/survive_dce.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * A facility for nodes to "survive" the dead code elimination. - */ - -#ifndef _FIRM_SURVIVE_DCE_H -#define _FIRM_SURVIVE_DCE_H - -#include "pmap.h" - -typedef struct _survive_dce_t survive_dce_t; - -/** - * Make a new dead code survive instance. - */ -survive_dce_t *new_survive_dce(void); - -/** - * Free a dead node survive instance. - */ -void free_survive_dce(survive_dce_t *sd); - -/** - * Register a storage place for a node. - * @param sd The survive dead code private data. - * @param place A pointer to a node pointer which shall be actualized. - * The location given by place will be updated with the substitute - * of the node it is currently pointing to after dead node elimination. - */ -void survive_dce_register_irn(survive_dce_t *sd, ir_node **place); - -/** - * Register a map to survive the dce. - * All value parts of the map's entries are assumed to be ir node pointers - * and are registered with survive_dce_register_irn(). - * @param sd The survive dce private data. - * @param m The map. - */ -void survive_dce_register_pmap(survive_dce_t *sd, pmap *m); - -#endif