* @author Michael Beck
* @version $Id$
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include "config.h"
#include <string.h>
store_mode = get_irn_mode(get_Store_value(store));
store_mode_len = get_mode_size_bytes(store_mode);
delta = load_offset - store_offset;
- if (delta < 0 || delta + load_mode_len > store_mode_len)
- return 0;
+ store_value = get_Store_value(store);
- if (get_mode_arithmetic(store_mode) != irma_twos_complement ||
- get_mode_arithmetic(load_mode) != irma_twos_complement)
- return 0;
+ if (delta != 0 || store_mode != load_mode) {
+ if (delta < 0 || delta + load_mode_len > store_mode_len)
+ return 0;
- store_value = get_Store_value(store);
+ if (get_mode_arithmetic(store_mode) != irma_twos_complement ||
+ get_mode_arithmetic(load_mode) != irma_twos_complement)
+ return 0;
- /* produce a shift to adjust offset delta */
- if (delta > 0) {
- ir_node *cnst;
- /* FIXME: only true for little endian */
- cnst = new_Const_long(mode_Iu, delta * 8);
- store_value = new_r_Shr(current_ir_graph, get_nodes_block(load),
- store_value, cnst, store_mode);
- }
+ /* produce a shift to adjust offset delta */
+ if (delta > 0) {
+ ir_node *cnst;
+
+ /* FIXME: only true for little endian */
+ cnst = new_Const_long(mode_Iu, delta * 8);
+ store_value = new_r_Shr(current_ir_graph, get_nodes_block(load),
+ store_value, cnst, store_mode);
+ }
- /* add an convert if needed */
- if (store_mode != load_mode) {
- store_value = new_r_Conv(current_ir_graph, get_nodes_block(load),
- store_value, load_mode);
+ /* add an convert if needed */
+ if (store_mode != load_mode) {
+ store_value = new_r_Conv(current_ir_graph, get_nodes_block(load),
+ store_value, load_mode);
+ }
}
DBG_OPT_RAW(load, store_value);
}
/* fourth step: create the Store */
- store = new_rd_Store(db, current_ir_graph, block, phiM, ptr, phiD);
+ store = new_rd_Store(db, current_ir_graph, block, phiM, ptr, phiD, 0);
#ifdef DO_CACHEOPT
co_set_irn_name(store, co_get_irn_ident(old_store));
#endif
ir_node *pred = get_Block_cfgpred_block(blk, pos);
ir_node *irn, *mem;
- pe->load = irn = new_rd_Load(db, current_ir_graph, pred, get_Phi_pred(phi, pos), ptr, load_mode);
+ pe->load = irn = new_rd_Load(db, current_ir_graph, pred, get_Phi_pred(phi, pos), ptr, load_mode, 0);
ninfo = get_ldst_info(irn, phase_obst(&env->ph));
ninfo->projs[pn_Load_M] = mem = new_r_Proj(current_ir_graph, pred, irn, mode_M, pn_Load_M);
have Bad() predecessors. */
set_irg_doms_inconsistent(irg);
}
- return (int) env.changes;
+ return env.changes != 0;
} /* optimize_load_store */