On Thu, Jan 24, 2013 at 1:08 PM, Jeff Law <l...@redhat.com> wrote:
> On 01/24/2013 10:23 AM, Alexandre Oliva wrote:
>>
>> On Jan 23, 2013, Aldy Hernandez <al...@redhat.com> wrote:
>>
>>> an internal training program Jeff Law devised over a decade ago (*)
>>
>>
>>> [Before anybody asks, the training program is probably no longer
>>> relevant.  So no fair bugging Jeff about it :)].
>>
>>
>> Yeah.  It was focused on the RTL/md part of GCC, with a few simple
>> assignments that amounted to implementing changes in the mn10300-elf
>> port.  That was before AM33/2.0 came up; before gimple and SSA, long
>> before tuples and mode iterators.  GCC was a very different beast then.
>> The course made me more of an RTL person, which still makes me hope this
>> tree-based stuff a fad and that some day we'll get back to our senses
>> and do SSA in RTL ;-)
>
> And the thing to remember about that training program is that it was geared
> strictly towards backend porting.  ie, new version of the frob chip comes
> out with some new instructions, we need to support them. That was a
> significant component of Cygnus's business back then.
>
> As Alex notes, GCC today is dramatically different and hacking new
> instructions into existing backends isn't nearly as important as it was 10+
> years ago.   Training around GCC's implementation of SSA, how GCC's
> optimization pipeline works, plugins, the propagation engine would be far
> more interesting and useful.
>
> When we made the change from RTL centric to gimple, one of the goals was to
> make GCC more approachable.  I would argue to some degree that was
> successful, but not nearly as much as I'd hoped.
>
> Of course that was over 10 years ago and we're at another point where some
> significant architectural changes to GCC are needed.  Google has kicked some
> stuff around and Red Hat is kicking stuff around toward that goal.
>
> I believe the ultimate focus will be on improving modularity for passes
> prior to gimple->rtl expansion and to make any notable progress we're going
> to have to tackle the type system problems.  It won't be sexy or fun, but to
> keep GCC relevant, it's one of the things we need to tackle.

Agreed.

I do see, however, a few areas where Clang/LLVM have gone that I do
not think GCC is currently thinking of entering: "toolability" (for
the lack of a better term).  Clang's design follows a different path
than g++.  It's not just a code generating parser, it is a pure parser
that also generates code.  The difference makes it suitable for any
kind of tool that needs to understand C++: static analyzers, code
re-formatters, syntax highlighters, and other similar tools.
Additionally, it is designed as a library, so it can be embedded into
applications.

That is a need that g++ cannot currently satisfy.  With plugins, one
could do something along those lines, but they are heavier, and are at
the mercy of the full compiler.  Additionally, g++ has very low
fidelity wrt the input program; it breaks down the original C++ input
almost immediately.

That is not necessarily a bad thing for g++.  But, to effectively
compete in those areas, it will need to be significantly re-organized.

LLVM has similar properties, at least as far as the middle end of the
compiler is concerned.  GCC still has an edge wrt backend portability.


Diego.

Reply via email to