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: strict aliasing


On Mon, 2007-11-05 at 10:15 -0800, Ian Lance Taylor wrote:
> skaller <skaller@users.sourceforge.net> writes:
> 
> > On Mon, 2007-11-05 at 09:56 -0800, Ian Lance Taylor wrote:
> > > skaller <skaller@users.sourceforge.net> writes:
> > > 
> > > > Can someone tell me what optimisations might be enabled/disabled
> > > > by strict aliasing rules?
> > 
> > > Strict aliasing only refers to loads and stores using pointers.  
> > 
> > Ah, I see. So turning it off isn't really all that bad
> > for optimisation.
> 
> It depends on the processor.  For an in-order processor with a deep
> pipeline (e.g., Itanium, but there are others), the ability to reorder
> loads and stores is very important to permit scheduling flexibility.
> Strict aliasing reportedly makes a difference for x86, but I don't
> think it makes a huge difference.

Well, I have been compiling with strict-aliasing enabled and
haven't encountered any errors that I'm aware of: the code seems
to run on x86, x86_64 and PPC32. I do get a couple of warnings.

In the example case, the code looks like:

	reinterpret<Y>(X(1,2,3))

where re-interpret is:

	template<typename T, typename U>
	T &reinterpret(U const &x) {
	  return reinterpret_cast<T&>(const_cast<U&>(x));
	}

This is pretty nasty, but is necessary to work around
design faults in C++.

It's essential here that the X struct be initialised before
any loads via the Y struct (any reordering would be a disaster).
g++ seems to generate the right code here, but the warning
does worry me. There are some other breaches -- essential with
a custom memory manager (Felix has a garbage collector), 
however I think they're no problem due to enough subroutine
boundaries getting in the way :)


-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net


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