-#define MIPS_MAKE_IFOLDING_TRANSFORM(srcnode, inode, commutative) \
-ir_node *mips_transform_##srcnode(ir_node* node) \
-{ \
- ir_node* op1 = get_irn_n(node, 0); \
- ir_node* op2 = get_irn_n(node, 1); \
- ir_node* result; \
- if(op1 == NULL || op2 == NULL) \
- return node; \
- \
- if((is_mips_lli(op2) || is_mips_lui(op2)) && is_tarval_16(op2)) { \
- mips_attr_t *attr, *op_attr = get_mips_attr(op2); \
- long val = get_tarval_long(op_attr->tv); \
- result = new_rd_mips_##inode(get_irn_dbg_info(node), get_irn_irg(node), get_nodes_block(node), \
- op1); \
- attr = get_mips_attr(result); \
- attr->tv = new_tarval_from_long(val, get_mode_sign(get_irn_mode(node)) ? mode_Hs : mode_Hu); \
- return result; \
- } \
- \
- if(commutative && (is_mips_lli(op1) || is_mips_lui(op1)) && is_tarval_16(op1)) { \
- mips_attr_t *attr, *op_attr = get_mips_attr(op1); \
- long val = get_tarval_long(op_attr->tv); \
- result = new_rd_mips_##inode(get_irn_dbg_info(node), get_irn_irg(node), get_nodes_block(node), \
- op2); \
- attr = get_mips_attr(result); \
- attr->tv = new_tarval_from_long(val, get_mode_sign(get_irn_mode(node)) ? mode_Hs : mode_Hu); \
- return result; \
- } \
- \
- return node; \
+static int mips_compare_load_store_attr(ir_node *node_a, ir_node *node_b)
+{
+ const mips_load_store_attr_t *a = get_mips_load_store_attr_const(node_a);
+ const mips_load_store_attr_t *b = get_mips_load_store_attr_const(node_b);
+
+ if(mips_compare_nodes_attr(node_a, node_b))
+ return 1;
+ if(a->stack_entity != b->stack_entity)
+ return 1;
+ if(a->offset != b->offset)
+ return 1;
+
+ return 0;