On 12/12/19 3:44 PM, Jason Merrill wrote:
On Wed, Dec 11, 2019 at 1:37 PM Jeff Law <l...@redhat.com
<mailto:l...@redhat.com>> wrote:
On Wed, 2019-12-11 at 00:03 -0700, Sandra Loosemore wrote:
> On 12/6/19 3:41 PM, Jeff Law wrote:
> > On Wed, 2019-11-13 at 09:27 -0700, Sandra Loosemore wrote:
> > > I bootstrapped and regression-tested this on x86_64-linux-
> > > gnu. There
> > > are a few regressions involving these tests:
> > >
> > > gcc.dg/tree-ssa/pr77445-2.c
> > I believe tihs is another instance of the FSA optimization. I'd
> > need
> > to see the before/after dumps to know if it's regressed. The main
> > purpose of the test was to verify that we didn't muck up the
> > profile
> > estimation after the FSA optimization.
> >
> >
> > > gcc.dg/tree-ssa/ssa-dce-3.c
> > So I think this one is supposed to collapse into a trivial infinite
> > loop. Anything else would be a regression.
> >
> >
> > > gcc.dg/tree-ssa/ssa-dom-thread-7.c
> > This is the FSA optimization. Unfortunately checking for it being
> > done
> > right is exceedingly painful. If you pass along the before/after
> > dumps
> > I can probably help determine whether or not we just need an update
> > to
> > the scanned bits.
> >
> > Given how much pressure there was to handle the FSA optimization,
> > I'd
> > prefer to make sure we're still doing it before moving forward.
>
> I poked at these 3 test cases some more. FWIW, it appears that if
> you
> use an unmodified build to compile them as C++ instead of C, the
> same
> problems appear. So I guess it is an existing bug in
> something-or-another that we are not presently optimizing code output
> by
> the C++ front end as well as that from the C front end. :-S (At
> least,
> the ssa-dce-3.c optimization failure is a bug; the other two might
> be
> fragile test cases.)
>
> The C++ front end used to lower loops in exactly the same way as the
> C
> front end. This is the patch that changed it:
>
> https://gcc.gnu.org/ml/gcc-patches/2014-11/msg01994.html
>
> There wasn't much discussion about how this affected optimization
> beyond
> noting a slight decrease in code size for a single benchmark, and no
> consideration at all of whether it wouldn't be better to have the C
> and
> C++ front ends use the same lowering strategy for loops, whichever
> way
> produced better code, so that the optimizers can better recognize
> the
> common patterns from both languages.
>
> Anyway, I'm no longer expecting to get this front end patch into GCC
> 10,
> but it would be helpful to get some guidance on how to proceed for
> resubmission when stage 1 re-opens. E.g. from where I'm sitting
> now,
> fixing the C++ constexpr evaluator to handle gotos (if it doesn't
> already?) and reverting to the C way of lowering loops seems like a
> much
> more bounded problem than fixing optimizers and trying to benchmark
> their effectiveness. :-S OTOH, somebody more familiar with these
> optimizations might see easy fixes. Or I could re-jigger my patches
> to
> continue to use different loop lowering strategies for C and C++ so
> it
> at least wouldn't make things any worse for either language than it
> already is.
Well, I'm happy to look at the before/after dumps if you pass them
along. I'd certainly like to see the two front-ends sharing these
bits.
Here are the dumps from ssa-dom-thread-7.c made to compile as C++;
cx-current is the dumps with current trunk; cx-old is changed to use the
old goto-based lowering like C.
Have you had a chance to look at these at all? Does it make sense to
check in my patch to revert C++ loop lowering to be like C again?
Jason