On Fri, Nov 14, 2014 at 8:19 PM, Segher Boessenkool <seg...@kernel.crashing.org> wrote: > Output the cost calculation always, not only when the costs disallow > a combination. Checking if your port has sane costs is much easier > this way. > > Also there is no point in printing full lines at once; debug dumps > are never translated, so we can print piece by piece.
Ok. Thanks, Richard. > > 2014-11-14 Segher Boessenkool <seg...@kernel.crashing.org> > > gcc/ > * combine.c (combine_validate_cost): Always print the insn costs > to the dump file. > > --- > gcc/combine.c | 63 > ++++++++++++++++++++++++----------------------------------- > 1 file changed, 25 insertions(+), 38 deletions(-) > > diff --git a/gcc/combine.c b/gcc/combine.c > index e240cfb..f7797e7 100644 > --- a/gcc/combine.c > +++ b/gcc/combine.c > @@ -914,48 +914,35 @@ combine_validate_cost (rtx_insn *i0, rtx_insn *i1, > rtx_insn *i2, rtx_insn *i3, > > /* Disallow this combination if both new_cost and old_cost are greater than > zero, and new_cost is greater than old cost. */ > - if (old_cost > 0 && new_cost > old_cost) > - { > - if (dump_file) > - { > - if (i0) > - { > - fprintf (dump_file, > - "rejecting combination of insns %d, %d, %d and %d\n", > - INSN_UID (i0), INSN_UID (i1), INSN_UID (i2), > - INSN_UID (i3)); > - fprintf (dump_file, "original costs %d + %d + %d + %d = %d\n", > - i0_cost, i1_cost, i2_cost, i3_cost, old_cost); > - } > - else if (i1) > - { > - fprintf (dump_file, > - "rejecting combination of insns %d, %d and %d\n", > - INSN_UID (i1), INSN_UID (i2), INSN_UID (i3)); > - fprintf (dump_file, "original costs %d + %d + %d = %d\n", > - i1_cost, i2_cost, i3_cost, old_cost); > - } > - else > - { > - fprintf (dump_file, > - "rejecting combination of insns %d and %d\n", > - INSN_UID (i2), INSN_UID (i3)); > - fprintf (dump_file, "original costs %d + %d = %d\n", > - i2_cost, i3_cost, old_cost); > - } > + int reject = old_cost > 0 && new_cost > old_cost; > > - if (newi2pat) > - { > - fprintf (dump_file, "replacement costs %d + %d = %d\n", > - new_i2_cost, new_i3_cost, new_cost); > - } > - else > - fprintf (dump_file, "replacement cost %d\n", new_cost); > - } > + if (dump_file) > + { > + fprintf (dump_file, "%s combination of insns ", > + reject ? "rejecting" : "allowing"); > + if (i0) > + fprintf (dump_file, "%d, ", INSN_UID (i0)); > + if (i1) > + fprintf (dump_file, "%d, ", INSN_UID (i1)); > + fprintf (dump_file, "%d and %d\n", INSN_UID (i2), INSN_UID (i3)); > > - return false; > + fprintf (dump_file, "original costs "); > + if (i0) > + fprintf (dump_file, "%d + ", i0_cost); > + if (i1) > + fprintf (dump_file, "%d + ", i1_cost); > + fprintf (dump_file, "%d + %d = %d\n", i2_cost, i3_cost, old_cost); > + > + if (newi2pat) > + fprintf (dump_file, "replacement costs %d + %d = %d\n", > + new_i2_cost, new_i3_cost, new_cost); > + else > + fprintf (dump_file, "replacement cost %d\n", new_cost); > } > > + if (reject) > + return false; > + > /* Update the uid_insn_cost array with the replacement costs. */ > INSN_COST (i2) = new_i2_cost; > INSN_COST (i3) = new_i3_cost; > -- > 1.8.1.4 >