This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Add uninitialized attribute?


There are some situations where an __undefined__ keyword would be useful, especially w.r.t. vector intrinsics.  Here is an example that came up recently.

    <a bunch of 4 wide vector computation>
    t1 = _mm_movehl_ps(t0, t0);
    t2 = _mm_add_ps(t1, t0);
    _mm_storel_pi(mem, t2);

In this example, the programmer doesn't care about the upper elements of the result of the _mm_movehl_ps intrinsic.  They are never used.  The only purpose of the first argument to _mm_movehl_ps is to produce these values that are never used.  But the programmer has to pass *something* as that first argument.  And in this case, the choice of t0 causes the compiler to insert an extra copy.  Ideally, the programmer would like to write this:

    <a bunch of 4 wide vector computation>
    t1 = _mm_movehl_ps(__undefined__, t0);
    t2 = _mm_add_ps(t1, t0);
    _mm_storel_pi(mem, t2);

For the Intel Compiler, we are adding new intrinsics to solve this problem, e.g. __m128 _mm_undefined_ps().  A keyword would be a nice alternative if we could find a convenient syntax.

Dave Kreitzer
IA32/Intel64 Code Generation
Intel Compiler Lab

-----Original Message-----
From: Mark Mitchell [mailto:mark@codesourcery.com] 
Sent: Friday, August 20, 2010 7:33 PM
To: H.J. Lu
Cc: Bernd Schmidt; Ian Lance Taylor; GCC Development; Kreitzer, David L; Girkar, Milind
Subject: Re: Add uninitialized attribute?

H.J. Lu wrote:

> void *undef __attribute__ ((uninitialized)); // Or something similar
> 
> foo (undef);
> 
> Compiler can pass some junk to foo.

I don't think that's a very good idea.  If we need this, which I doubt,
it should be something like a new __undefined__ keyword, that expands to
 an undefined value.  In C++, a syntax like __undefined__<X>() would be
plausible; I'm not sure there's a good C syntax.  Perhaps you could do
what tgmath does.

I guess if you had this, you could use it in place of the attribute;

  int i = __undefined__<int>();

would serve to indicate that you were knowingly not initializing i.

-- 
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]