X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Fldstopt.c;h=829cdae6f36ead36241ddde147d2d1b464c40344;hb=d7a1deb733ab0ef3eb078754e3244ec4930d0981;hp=f3a2f6d0971af17b5ec656eec2ecb77245926e36;hpb=eb08138c6b80c169945568e4414f491a9bc20388;p=libfirm diff --git a/ir/opt/ldstopt.c b/ir/opt/ldstopt.c index f3a2f6d09..829cdae6f 100644 --- a/ir/opt/ldstopt.c +++ b/ir/opt/ldstopt.c @@ -17,23 +17,19 @@ * PURPOSE. */ -/* - * Project: libFIRM - * File name: ir/opt/ldstopt.c - * Purpose: load store optimizations - * Author: Michael Beck - * Created: - * CVS-ID: $Id$ - * Copyright: (c) 1998-2007 Universität Karlsruhe +/** + * @file + * @brief Load/Store optimizations. + * @author Michael Beck + * @version $Id$ */ #ifdef HAVE_CONFIG_H # include "config.h" #endif -#ifdef HAVE_STRING_H -# include -#endif +#include +#include "iroptimize.h" #include "irnode_t.h" #include "irgraph_t.h" #include "irmode_t.h" @@ -1070,22 +1066,6 @@ static unsigned optimize_phi(ir_node *phi, walk_env_t *wenv) for (i = 0; i < n; ++i) stores[i] = skip_Proj(get_Phi_pred(phi, i)); - /* Prepare: Skip the memory Proj: we need this in the case some stores - are cascaded. - Beware: One Store might be included more than once in the stores[] - list, so we must prevent to do the exchange more than once. - */ - for (i = 0; i < n; ++i) { - ir_node *store = stores[i]; - ir_node *proj_m; - - info = get_irn_link(store); - proj_m = info->projs[pn_Store_M]; - - if (is_Proj(proj_m) && get_Proj_pred(proj_m) == store) - exchange(proj_m, get_Store_mem(store)); - } - /* first step: collect all inputs */ for (i = 0; i < n; ++i) { ir_node *store = stores[i]; @@ -1094,6 +1074,8 @@ static unsigned optimize_phi(ir_node *phi, walk_env_t *wenv) inM[i] = get_Store_mem(store); inD[i] = get_Store_value(store); idx[i] = info->exc_idx; + + kill_node(store); } block = get_nodes_block(phi);