[PATCH] align_value attribute in Clang

Richard Smith richard at metafoo.co.uk
Wed Oct 1 17:52:08 PDT 2014


On Wed, Oct 1, 2014 at 5:10 PM, Hal Finkel <hfinkel at anl.gov> wrote:

> ----- Original Message -----
> > From: "Alexey Bataev" <a.bataev at hotmail.com>
> > To: "Richard Smith" <richard at metafoo.co.uk>
> > Cc: "cfe commits" <cfe-commits at cs.uiuc.edu>, "aaron ballman" <
> aaron.ballman at gmail.com>, "Michael Spencer"
> > <bigcheesegs at gmail.com>,
> reviews+d4635+public+b7e82bdc1d8c324a at reviews.llvm.org, "Hal Finkel" <
> hfinkel at anl.gov>
> > 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 <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
> > >
> > >
> >
> >
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141001/d4d6487e/attachment.html>


More information about the cfe-commits mailing list