X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fopt%2Fldstopt.c;h=829cdae6f36ead36241ddde147d2d1b464c40344;hb=d7a1deb733ab0ef3eb078754e3244ec4930d0981;hp=ec094188bf7c3c4d78b9c91a50739d1315bc971b;hpb=8f445230c9cae43e02de84277acee998c745cab2;p=libfirm diff --git a/ir/opt/ldstopt.c b/ir/opt/ldstopt.c index ec094188b..829cdae6f 100644 --- a/ir/opt/ldstopt.c +++ b/ir/opt/ldstopt.c @@ -1,27 +1,35 @@ /* - * 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 - * 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 Load/Store optimizations. + * @author Michael Beck + * @version $Id$ */ #ifdef HAVE_CONFIG_H # include "config.h" #endif -#ifdef HAVE_ALLOCA_H -#include -#endif -#ifdef HAVE_MALLOC_H -#include -#endif -#ifdef HAVE_STRING_H -# include -#endif +#include +#include "iroptimize.h" #include "irnode_t.h" #include "irgraph_t.h" #include "irmode_t.h" @@ -40,6 +48,7 @@ #include "irtools.h" #include "opt_polymorphy.h" #include "irmemory.h" +#include "xmalloc.h" #ifdef DO_CACHEOPT #include "cacheopt/cachesim.h" @@ -1057,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]; @@ -1081,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);