X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_new_nodes.c;h=c067ac37cc814ca72ac021441f921df831c30e42;hb=bd31a5350ce9e110c058b4ad2223d460c9eb5c4e;hp=8f6381c571a76c24b86ea4c58bd58296b2791725;hpb=07ccf5c739e1a0627ad3fc2f732b9b5612add654;p=libfirm diff --git a/ir/be/ia32/ia32_new_nodes.c b/ir/be/ia32/ia32_new_nodes.c index 8f6381c57..c067ac37c 100644 --- a/ir/be/ia32/ia32_new_nodes.c +++ b/ir/be/ia32/ia32_new_nodes.c @@ -96,7 +96,9 @@ static void dump_reg_req(FILE *F, ir_node *n, const arch_register_req_t **reqs, } if (reqs[i]->type & arch_register_req_type_should_be_same) { - ir_fprintf(F, " same as %+F", get_irn_n(n, reqs[i]->other_same)); + ir_fprintf(F, " same as %+F", get_irn_n(n, reqs[i]->other_same[0])); + if (reqs[i]->other_same[1] != -1) + ir_fprintf(F, " or %+F", get_irn_n(n, reqs[i]->other_same[1])); } if (reqs[i]->type & arch_register_req_type_should_be_different) { @@ -279,14 +281,8 @@ static int ia32_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { if(is_ia32_SwitchJmp(n) || is_ia32_CopyB(n) || is_ia32_CopyB_i(n)) { fprintf(F, "pn_code = %ld\n", get_ia32_pncode(n)); } else { - if(get_ia32_pncode(n) & ia32_pn_Cmp_Unsigned) { - long pnc = get_ia32_pncode(n); - fprintf(F, "pn_code = %ld (%s, unsigned)\n", - pnc, get_pnc_string(pnc & ~ia32_pn_Cmp_Unsigned)); - } else { - fprintf(F, "pn_code = %ld (%s)\n", get_ia32_pncode(n), - get_pnc_string(get_ia32_pncode(n))); - } + fprintf(F, "pn_code = %ld (%s)\n", get_ia32_pncode(n), + get_pnc_string(get_ia32_pncode(n))); } /* dump n_res */ @@ -986,8 +982,11 @@ int get_ia32_out_regnr(const ir_node *node, int pos) { void ia32_swap_left_right(ir_node *node) { - ir_node *left = get_irn_n(node, n_ia32_binary_left); - ir_node *right = get_irn_n(node, n_ia32_binary_right); + ia32_attr_t *attr = get_ia32_attr(node); + ir_node *left = get_irn_n(node, n_ia32_binary_left); + ir_node *right = get_irn_n(node, n_ia32_binary_right); + + attr->data.cmp_flipped = !attr->data.cmp_flipped; assert(is_ia32_commutative(node)); set_irn_n(node, n_ia32_binary_left, right); set_irn_n(node, n_ia32_binary_right, left); @@ -1126,6 +1125,10 @@ int ia32_compare_attr(const ia32_attr_t *a, const ia32_attr_t *b) { if (a->data.except_label != b->data.except_label) return 1; + if (a->data.cmp_flipped != b->data.cmp_flipped + || a->data.cmp_unsigned != b->data.cmp_unsigned) + return 1; + return 0; }