[PATCH] align_value attribute in Clang

Bataev, Alexey a.bataev at hotmail.com
Tue Sep 30 03:03:00 PDT 2014


Hi Richard,
your guess is correct, it is applied to the outer pointer.

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 <hfinkel at anl.gov 
> <mailto:hfinkel at anl.gov>> 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" <a.bataev at hotmail.com
>     <mailto:a.bataev at hotmail.com>>
>     > To: "Hal Finkel" <hfinkel at anl.gov <mailto:hfinkel at anl.gov>>,
>     reviews+D4635+public+b7e82bdc1d8c324a at reviews.llvm.org
>     <mailto:reviews%2BD4635%2Bpublic%2Bb7e82bdc1d8c324a at reviews.llvm.org>
>     > Cc: cfe-commits at cs.uiuc.edu <mailto:cfe-commits at cs.uiuc.edu>,
>     "aaron ballman" <aaron.ballman at gmail.com
>     <mailto:aaron.ballman at gmail.com>>, bigcheesegs at gmail.com
>     <mailto:bigcheesegs at gmail.com>, richard at metafoo.co.uk
>     <mailto:richard at metafoo.co.uk>
>     > 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" <richard at metafoo.co.uk
>     <mailto:richard at metafoo.co.uk>>
>     > >> To: hfinkel at anl.gov <mailto:hfinkel at anl.gov>, "aaron ballman"
>     <aaron.ballman at gmail.com <mailto:aaron.ballman at gmail.com>>,
>     > >> bigcheesegs at gmail.com <mailto:bigcheesegs at gmail.com>,
>     richard at metafoo.co.uk <mailto:richard at metafoo.co.uk>, "a
>     > >> bataev" <a.bataev at hotmail.com <mailto:a.bataev at hotmail.com>>
>     > >> Cc: cfe-commits at cs.uiuc.edu <mailto:cfe-commits at cs.uiuc.edu>
>     > >> 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
>
>





More information about the cfe-commits mailing list