On Thu, Sep 14, 2017 at 3:08 PM, Markus Trippelsdorf
<mar...@trippelsdorf.de> wrote:
> On 2017.09.14 at 14:48 +0200, Richard Biener wrote:
>> On Thu, Sep 14, 2017 at 12:42 PM, Martin Liška <mli...@suse.cz> wrote:
>> > On 09/14/2017 12:37 PM, Bin.Cheng wrote:
>> >> On Thu, Sep 14, 2017 at 11:24 AM, Richard Biener
>> >> <richard.guent...@gmail.com> wrote:
>> >>> On Thu, Sep 14, 2017 at 12:18 PM, Martin Liška <mli...@suse.cz> wrote:
>> >>>> On 09/14/2017 12:07 PM, Markus Trippelsdorf wrote:
>> >>>>> On 2017.09.14 at 11:57 +0200, Richard Biener wrote:
>> >>>>>> On Wed, Sep 13, 2017 at 6:11 PM, Nikos Chantziaras <rea...@gmail.com> 
>> >>>>>> wrote:
>> >>>>>>> On 12/09/17 16:57, Wilco Dijkstra wrote:
>> >>>>>>>>
>> >>>>>>>> [...] As a result users are
>> >>>>>>>> required to enable several additional optimizations by hand to get 
>> >>>>>>>> good
>> >>>>>>>> code.
>> >>>>>>>> Other compilers enable more optimizations at -O2 (loop unrolling in 
>> >>>>>>>> LLVM
>> >>>>>>>> was
>> >>>>>>>> mentioned repeatedly) which GCC could/should do as well.
>> >>>>>>>> [...]
>> >>>>>>>>
>> >>>>>>>> I'd welcome discussion and other proposals for similar improvements.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> What's the status of graphite? It's been around for years. Isn't it 
>> >>>>>>> mature
>> >>>>>>> enough to enable these:
>> >>>>>>>
>> >>>>>>> -floop-interchange -ftree-loop-distribution -floop-strip-mine 
>> >>>>>>> -floop-block
>> >>>>>>>
>> >>>>>>> by default for -O2? (And I'm not even sure those are the complete 
>> >>>>>>> set of
>> >>>>>>> graphite optimization flags, or just the "useful" ones.)
>> >>>>>>
>> >>>>>> It's not on by default at any optimization level.  The main issue is 
>> >>>>>> the
>> >>>>>> lack of maintainance and a set of known common internal compiler 
>> >>>>>> errors
>> >>>>>> we hit.  The other issue is that there's no benefit of turning those 
>> >>>>>> on for
>> >>>>>> SPEC CPU benchmarking as far as I remember but quite a bit of extra
>> >>>>>> compile-time cost.
>> >>>>>
>> >>>>> Not to mention the numerous wrong-code bugs. IMHO graphite should
>> >>>>> deprecated as soon as possible.
>> >>>>>
>> >>>>
>> >>>> For wrong-code bugs we've got and I recently went through, I fully 
>> >>>> agree with this
>> >>>> approach and I would do it for GCC 8. There are PRs where order of 
>> >>>> simple 2 loops
>> >>>> is changed, causing wrong-code as there's a data dependence.
>> >>>>
>> >>>> Moreover, I know that Bin was thinking about selection whether to use 
>> >>>> classical loop
>> >>>> optimizations or Graphite (depending on options provided). This would 
>> >>>> simplify it ;)
>> >>>
>> >>> I don't think removing graphite is warranted, I still think it is the
>> >>> approach to use when
>> >>> handling non-perfect nests.
>> >> Hi,
>> >> IMHO, we should not be in a hurry to remove graphite, though we are
>> >> introducing some traditional transformations.  It's a quite standalone
>> >> part in GCC and supports more transformations.  Also as it gets more
>> >> attention, never know if somebody will find time to work on it.
>> >
>> > Ok. I just wanted to express that from user's perspective I would not 
>> > recommend it to use.
>> > Even if it improves some interesting (and for classical loop optimization 
>> > hard) loop nests,
>> > it can still blow up on a quite simple data dependence in between loops. 
>> > That said, it's quite
>> > risky to use it.
>>
>> We only have a single wrong-code bug in bugzilla with a testcase and I
>> just fixed it (well,
>> patch in testing).  We do have plenty of ICEs, yes.
>
> Even tramp3d-v4, which is cited in several graphite papers, gets
> miscompiled: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68823.

But unfortunately there isn't a self-contained testcase for that.  The comments
hint at sth like

int a[][];
p = &a[1][0];
for(;;)
  a[i][j] = ...
  p[i] = ...

would get at it, that is, accessing memory via two-dim array and pointer.

Richard.

> --
> Markus

Reply via email to