# include "irgraph_t.h"
# include "irmode_t.h"
# include "iropt_t.h"
-# include "ircons.h"
+# include "ircons_t.h"
# include "irgmod.h"
# include "irvrfy.h"
-# include "tv.h"
+# include "tv_t.h"
# include "dbginfo_t.h"
# include "iropt_dbg.h"
# include "irflag_t.h"
CASE(And);
CASE(Conv);
CASE(Phi);
- CASE(Load); /* dangerous */
- CASE(Store); /* dangerous, see todo */
+// CASE(Load); /* dangerous */
+// CASE(Store); /* dangerous, see todo */
CASE(Proj);
CASE(Id);
default:
/**
* Transform a Store before a Store to the same address...
+ * Both nodes must be in the same block.
*
* @todo Check for volatile! Moreover, what if the first store
* has a exception handler while the other has not?
*/
static ir_node *transform_node_Store(ir_node *store)
{
- ir_node *n = skip_Proj(get_Store_mem(store));
- ir_node *ptr = get_Store_ptr(store);
+ ir_node *pred = skip_Proj(get_Store_mem(store));
+ ir_node *ptr = get_Store_ptr(store);
- if (get_irn_op(n) == op_Store && get_Store_ptr(n) == ptr) {
+ if (get_irn_op(pred) == op_Store &&
+ get_Store_ptr(pred) == ptr &&
+ get_nodes_block(pred) == get_nodes_block(store)) {
/* the Store n is useless, as it is overwritten by the store store */
- ir_node *mem = get_Store_mem(n);
+ ir_node *mem = get_Store_mem(pred);
- turn_into_tuple(n, 2);
- set_Tuple_pred(n, pn_Store_M, mem);
- set_Tuple_pred(n, pn_Store_X_except, new_Bad());
+ turn_into_tuple(pred, 2);
+ set_Tuple_pred(pred, pn_Store_M, mem);
+ set_Tuple_pred(pred, pn_Store_X_except, new_Bad());
}
return store;
}
CASE(Eor);
CASE(Not);
CASE(Proj);
- CASE(Store);
+// CASE(Store); /* dangerous, see todo */
CASE(Or);
default:
op->transform_node = NULL;