diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 1a022fbaf8da23803392bd7c2c7521cc18f79842..91dd49200c3022a411184487899c9aba5e3257a2 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -1067,45 +1067,8 @@ print_pre_expr (FILE *outfile, const pre_expr expr) case REFERENCE: { - vn_reference_op_t vro; - unsigned int i; vn_reference_t ref = PRE_EXPR_REFERENCE (expr); - fprintf (outfile, "{"); - for (i = 0; - ref->operands.iterate (i, &vro); - i++) - { - bool closebrace = false; - if (vro->opcode != SSA_NAME - && TREE_CODE_CLASS (vro->opcode) != tcc_declaration) - { - fprintf (outfile, "%s", get_tree_code_name (vro->opcode)); - if (vro->op0) - { - fprintf (outfile, "<"); - closebrace = true; - } - } - if (vro->op0) - { - print_generic_expr (outfile, vro->op0); - if (vro->op1) - { - fprintf (outfile, ","); - print_generic_expr (outfile, vro->op1); - } - if (vro->op2) - { - fprintf (outfile, ","); - print_generic_expr (outfile, vro->op2); - } - } - if (closebrace) - fprintf (outfile, ">"); - if (i != ref->operands.length () - 1) - fprintf (outfile, ","); - } - fprintf (outfile, "}"); + print_vn_reference_ops (outfile, ref->operands); if (ref->vuse) { fprintf (outfile, "@"); diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 0567a2e9ff588c72a5451b9955e9fc74a56949a7..16e75b518b01b0715ff6939d26834dc3230aba95 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -249,6 +249,55 @@ vn_reference_hasher::equal (const vn_reference_s *v, const vn_reference_s *c) typedef hash_table<vn_reference_hasher> vn_reference_table_type; typedef vn_reference_table_type::iterator vn_reference_iterator_type; +/* Pretty-print OPS to OUTFILE. */ + +void +print_vn_reference_ops (FILE *outfile, const vec<vn_reference_op_s> ops) +{ + vn_reference_op_t vro; + unsigned int i; + fprintf (outfile, "{"); + for (i = 0; ops.iterate (i, &vro); i++) + { + bool closebrace = false; + if (vro->opcode != SSA_NAME + && TREE_CODE_CLASS (vro->opcode) != tcc_declaration) + { + fprintf (outfile, "%s", get_tree_code_name (vro->opcode)); + if (vro->op0) + { + fprintf (outfile, "<"); + closebrace = true; + } + } + if (vro->op0) + { + print_generic_expr (outfile, vro->op0); + if (vro->op1) + { + fprintf (outfile, ","); + print_generic_expr (outfile, vro->op1); + } + if (vro->op2) + { + fprintf (outfile, ","); + print_generic_expr (outfile, vro->op2); + } + } + if (closebrace) + fprintf (outfile, ">"); + if (i != ops.length () - 1) + fprintf (outfile, ","); + } + fprintf (outfile, "}"); +} + +DEBUG_FUNCTION void +debug_vn_reference_ops (const vec<vn_reference_op_s> ops) +{ + print_vn_reference_ops (stderr, ops); + fputc ('\n', stderr); +} /* The set of VN hashtables. */ diff --git a/gcc/tree-ssa-sccvn.h b/gcc/tree-ssa-sccvn.h index e4f1ff1eb20932e1eefa986f2d850f24630b90dd..6df526c269b2a4796feeba64de78f10f83a2a640 100644 --- a/gcc/tree-ssa-sccvn.h +++ b/gcc/tree-ssa-sccvn.h @@ -265,6 +265,7 @@ void vn_reference_lookup_call (gcall *, vn_reference_t *, vn_reference_t); vn_reference_t vn_reference_insert_pieces (tree, alias_set_type, alias_set_type, tree, vec<vn_reference_op_s>, tree, unsigned int); +void print_vn_reference_ops (FILE *, const vec<vn_reference_op_s>); bool vn_nary_op_eq (const_vn_nary_op_t const vno1, const_vn_nary_op_t const vno2);