Re: RFC: Add ADD_RESTRICT tree code

2013-03-24 Thread Tobias Burnus
Given that GCC is again in Stage 1, I would like to bring attention to the following RFC patch. To quote Richard in PR 45586: "I believe the correct solution will involve implementing the proposal for introducing explicit restrict tags and using that in the fortran frontend (removing the restr

Re: RFC: Add ADD_RESTRICT tree code

2011-10-14 Thread Richard Guenther
On Wed, Oct 12, 2011 at 7:16 PM, Michael Matz wrote: > Hi, > > this adds a mean to retain restrict information without relying on > restrict casts.  In the patch it's emitted by the gimplifier when it sees > a norestrict->restrict cast (which from then on is useless), at which > point also the tag

Re: RFC: Add ADD_RESTRICT tree code

2011-10-13 Thread Joseph S. Myers
On Thu, 13 Oct 2011, Michael Matz wrote: > Yeah. But I continue to think that this reading is against the intent (or > should be). All the examples in the standard and rationale never say > anything about pointers to restricted objects and the problematic cases > one can construct with them,

Re: RFC: Add ADD_RESTRICT tree code

2011-10-13 Thread Michael Matz
Hi, On Thu, 13 Oct 2011, Jakub Jelinek wrote: > On Thu, Oct 13, 2011 at 02:57:56PM +0200, Michael Matz wrote: > > struct S {int * restrict p;}; > > void foo (struct S *s, struct S *t) { > > s->p[0] = 0; > > t->p[0] = 1; // undefined if s->p == t->p; the caller was responsible > >

Re: RFC: Add ADD_RESTRICT tree code

2011-10-13 Thread Jakub Jelinek
On Thu, Oct 13, 2011 at 02:57:56PM +0200, Michael Matz wrote: > struct S {int * restrict p;}; > void foo (struct S *s, struct S *t) { > s->p[0] = 0; > t->p[0] = 1; // undefined if s->p == t->p; the caller was responsible > // to not do that This is undefined only if s->p == t

Re: RFC: Add ADD_RESTRICT tree code

2011-10-13 Thread Michael Matz
Hi, On Thu, 13 Oct 2011, Jakub Jelinek wrote: > I'd sum up my previous mail as noting that restricted pointers are objects, > so restrict is not property of expressions. So e.g. I don't think > we should add ADD_RESTRICT (or, at least, not an ADD_RESTRICT with different > tag) on every assignmen

Re: RFC: Add ADD_RESTRICT tree code

2011-10-13 Thread Jakub Jelinek
On Thu, Oct 13, 2011 at 11:21:58AM +0200, Richard Guenther wrote: > I suggested that for a final patch we only add ADD_RESTRICT in the > gimplifier for restrict qualified parameters, to make the inlining case > work again. ADD_RESTRICTs for casts to restrict qualified pointers > I would add at par

Re: RFC: Add ADD_RESTRICT tree code

2011-10-13 Thread Richard Guenther
On Thu, Oct 13, 2011 at 10:41 AM, Jakub Jelinek wrote: > On Thu, Oct 13, 2011 at 01:38:44AM +0200, Michael Matz wrote: >> IMO reading the standard to allow an access to be >> based "on s.p _as well as_ t->p" and that this should result in any >> sensible behaviour regarding restrict is interpretin

Re: RFC: Add ADD_RESTRICT tree code

2011-10-13 Thread Jakub Jelinek
On Thu, Oct 13, 2011 at 01:38:44AM +0200, Michael Matz wrote: > IMO reading the standard to allow an access to be > based "on s.p _as well as_ t->p" and that this should result in any > sensible behaviour regarding restrict is interpreting too much into it. No. Because s.p and t->p designates

Re: RFC: Add ADD_RESTRICT tree code

2011-10-12 Thread Michael Matz
Hi, On Wed, 12 Oct 2011, Jakub Jelinek wrote: > > Assignment 2 means that t->p points to s.p. Assignment 3 changes t->p and > > s.p, but the change to s.p doesn't occur through a pointer based on t->p > > or any other restrict pointer, in fact it doesn't occur through any > > explicit initial

Re: RFC: Add ADD_RESTRICT tree code

2011-10-12 Thread Jakub Jelinek
On Wed, Oct 12, 2011 at 07:16:56PM +0200, Michael Matz wrote: > This patch will fix the currently XFAILed tree-ssa/restrict-4.c again, as > well as fix PR 50419. It also still fixes the original testcase of > PR 49279. But it will break the checked in testcase for this bug report. > I believe

RFC: Add ADD_RESTRICT tree code

2011-10-12 Thread Michael Matz
Hi, this adds a mean to retain restrict information without relying on restrict casts. In the patch it's emitted by the gimplifier when it sees a norestrict->restrict cast (which from then on is useless), at which point also the tag of that restrict pointer is generated. That's later used by