On Wed, Oct 1, 2014 at 5:10 PM, Hal Finkel <[email protected]> wrote: > ----- Original Message ----- > > From: "Alexey Bataev" <[email protected]> > > To: "Richard Smith" <[email protected]> > > Cc: "cfe commits" <[email protected]>, "aaron ballman" < > [email protected]>, "Michael Spencer" > > <[email protected]>, > [email protected], "Hal Finkel" < > [email protected]> > > Sent: Tuesday, September 30, 2014 5:03:00 AM > > Subject: Re: [PATCH] align_value attribute in Clang > > > > Hi Richard, > > your guess is correct, it is applied to the outer pointer. > > Okay, in that case if we keep it out of the type system, then I suppose > the current patch is essentially okay. The optimizer will deduce the > alignment information when it can (especially after inlining), but if it is > not a separate type, then we actually can't have it follow template > deduction otherwise because it can't affect the mangling. Sound right? >
Yes, sounds right to me. > -Hal > > > > > Best regards, > > Alexey Bataev > > ============= > > Software Engineer > > Intel Compiler Team > > > > 30.09.2014 4:50, Richard Smith пишет: > > > On Mon, Sep 29, 2014 at 11:36 AM, Hal Finkel <[email protected] > > > <mailto:[email protected]>> wrote: > > > > > > Hi Richard, > > > > > > What does all of this suggest to you about the right design? > > > > > > > > > One more question. Given: > > > > > > typedef int * __attribute__((align_value(32))) *Y; > > > > > > ... does the attribute apply to the outer pointer or the inner > > > pointer? (My guess: it surprisingly applies to the outer pointer.) > > > If > > > that's the case, then I think align_value should live entirely > > > outside > > > the type system, in the same way that __attribute__((aligned)) > > > does. > > > Note that, given: > > > > > > typedef int __attribute__((aligned(64))) *p > > > __attribute__((aligned(8))) > > > > > > p is a 64-byte-aligned pointer to int, not an 8-byte-aligned > > > pointer > > > to a 64-byte-aligned int. > > > > > > If that's the case, I suggest you model it exactly like AlignedAttr > > > -- > > > as an attribute on the TypedefDecl -- and look for it explicitly in > > > the cases where you want to use it by walking the type sugar and > > > looking for a TypedefDecl. > > > > > > FWIW, maybe creating some kind of synthetic typedef type for > > > the > > > return value from DeduceTemplateArgumentsByTypeMatch would > > > work? > > > > > > Thanks again, > > > Hal > > > > > > ----- Original Message ----- > > > > From: "Alexey Bataev" <[email protected] > > > <mailto:[email protected]>> > > > > To: "Hal Finkel" <[email protected] <mailto:[email protected]>>, > > > [email protected] > > > <mailto: > reviews%2bd4635%2bpublic%[email protected]> > > > > Cc: [email protected] <mailto:[email protected]>, > > > "aaron ballman" <[email protected] > > > <mailto:[email protected]>>, [email protected] > > > <mailto:[email protected]>, [email protected] > > > <mailto:[email protected]> > > > > Sent: Friday, September 26, 2014 12:26:29 AM > > > > Subject: Re: [PATCH] align_value attribute in Clang > > > > > > > > 1. ICC does not create a new type for type with this > > > > attribute. All > > > > types are still the same. > > > > 2. > > > > > > > > int n __attribute__((aligned(32))); > > > > decltype(&n) - int*. > > > > > > > > > > > > Best regards, > > > > Alexey Bataev > > > > ============= > > > > Software Engineer > > > > Intel Compiler Team > > > > > > > > 26.09.2014 4:28, Hal Finkel пишет: > > > > > ----- Original Message ----- > > > > >> From: "Richard Smith" <[email protected] > > > <mailto:[email protected]>> > > > > >> To: [email protected] <mailto:[email protected]>, "aaron > > > > >> ballman" > > > <[email protected] <mailto:[email protected]>>, > > > > >> [email protected] <mailto:[email protected]>, > > > [email protected] <mailto:[email protected]>, "a > > > > >> bataev" <[email protected] > > > > >> <mailto:[email protected]>> > > > > >> Cc: [email protected] > > > > >> <mailto:[email protected]> > > > > >> Sent: Thursday, September 25, 2014 7:06:33 PM > > > > >> Subject: Re: [PATCH] align_value attribute in Clang > > > > >> > > > > >> I'd like some more information about how ICC treats this > > > > >> attribute. > > > > >> Does it produce a new type? For instance: > > > > > I did a quick experiment with icc (ICC) 14.0.1 20131008 > > > > > (with > > > -Wall > > > > > -O3 -pedantic): > > > > > > > > > >> typedef int *I32 __attribute__((align_value(32))); > > > > >> typedef int *I64 __attribute__((align_value(64))); > > > > >> > > > > >> typedef I32 X; typedef I64 X; // ill-formed? > > > > > No diagnostic. > > > > > > > > > >> template<typename> struct Y; > > > > >> typedef Y<I32> Z; typedef Y<I64> Z; // ill-formed? > > > > > No diagnostic. > > > > > > > > > >> extern I32 i32; > > > > >> I64 i64 = i32; // ill-formed? Is an explicit cast > > > > >> required? > > > > > No diagnostic. > > > > > > > > > >> I32 i32 = i64; // ill-formed? Is there an implicit > > > > >> conversion > > > > >> that > > > > >> discards alignment? > > > > > No diagnostic. > > > > > > > > > > Alexey, can you please comment on the specifics? > > > > > > > > > > -Hal > > > > > > > > > >> ... and if there's an implicit conversion that discards > > > alignment, > > > > >> what is its conversion rank? > > > > >> > > > > >> If I have: > > > > >> > > > > >> int n __attribute__((aligned(32))); > > > > >> > > > > >> ... then what is `decltype(&n)`? Is it `int*`, or `int* > > > > >> __attribute__((align_value(32)))`? > > > > >> > > > > >> http://reviews.llvm.org/D4635 > > > > >> > > > > >> > > > > >> > > > > > > > > > > > > > > -- > > > Hal Finkel > > > Assistant Computational Scientist > > > Leadership Computing Facility > > > Argonne National Laboratory > > > > > > > > > > > > -- > Hal Finkel > Assistant Computational Scientist > Leadership Computing Facility > Argonne National Laboratory >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
