+/**
+ * Compare two node attributes.
+ *
+ * @return zero if both attributes are identically
+ */
+static int cmp_node_attr(be_node_attr_t *a, be_node_attr_t *b) {
+ if (a->max_reg_data == b->max_reg_data) {
+ int i;
+
+ for (i = 0; i < a->max_reg_data; ++i) {
+ if (a->reg_data[i].reg != b->reg_data[i].reg ||
+ memcmp(&a->reg_data[i].in_req, &b->reg_data[i].in_req, sizeof(b->reg_data[i].in_req)) ||
+ memcmp(&a->reg_data[i].req, &b->reg_data[i].req, sizeof(a->reg_data[i].req)))
+ return 1;
+ }
+ return 0;
+ }
+ return 1;
+}
+
+/**
+ * Compare the attributes of two FrameAddr nodes.
+ *
+ * @return zero if both attributes are identically
+ */
+static int FrameAddr_cmp_attr(ir_node *a, ir_node *b) {
+ be_frame_attr_t *a_attr = get_irn_attr(a);
+ be_frame_attr_t *b_attr = get_irn_attr(b);
+
+ if (a_attr->ent == b_attr->ent && a_attr->offset == b_attr->offset)
+ return cmp_node_attr(&a_attr->node_attr, &b_attr->node_attr);
+ return 1;
+}
+