There are quite a few missed-optimization PRs on the serious-regression
list: 25 to be exact.  Clearly, performance is important; the
justification for all of the tree-ssa infrastructure is better
performance.  The point is just to have more passes; it's to have better
SPEC numbers, better CSiBe numbers, faster compilers, smaller kernels,
etc.  It's painful to give up hard-won gains.  So, we need to take
optimization regressions seriously.

Now, that said, we all know that optimization is a game of heursitics,
and that every release will regress on some test cases.  We can add a
new pass, which improves a set of benchmarks, but happens to pessimize
some relatively rare case.  Hey, it happens.

But, we should investigate these PRs, and figure out what's going wrong,
and why.  If it's really the scenario above, then the audit trail should
say something like:

"The problem is that we're now splitting instructions earlier, which
exposes more scheduling opprotunities, but combine is unable to combine
four instructions, so we don't reassemble the original form.  There's
nothing practical that we can do about this without giving up the 3%
SPEC improvement we got from the new splitters."

The key elements are that you've (a) figured out what is different
between this version and the one that worked better (the early
splitting), (b) you've explained why this can't easily be fixed
(combine's 3-insn limitation), and (c) you've justified not going
backwards (the 3% SPEC improvement).  Then, I can look at the PR, and
just close it out.  Or, you can.  There's no need to feel embarassed
that our compiler isn't able to solve NP-hard problems.

But, without the anlaysis, we've got no way of knowing whether we've got
a shot at fixing the regressions.  "I want to say this is <some patch>"
or "This is just our register allocator being stupid" don't help.  Do
some real analysis; don't just guess.  Show other people waht's wrong;
if it's the register allocator being stupid, show the .lreg dump, and
the .greg dump, and show how it dumped the register used in the inner
loop, rather than the one in the outer loop.  Imagine you had to write
an essay that proved that you understood the problem.

This isn't just for my sake when reviewing the PR list; it's for the
sake of anyone who might want to fix the bug.  Optimizer folks, please
help with this -- your time might be as well spent analyzing some of
these PRs as implementing additional stuff.

Thanks,

-- 
Mark Mitchell
CodeSourcery, LLC
[EMAIL PROTECTED]
(916) 791-8304

Reply via email to