[LLVMdev] Making GEP into vector illegal?

Chris Lattner clattner at apple.com
Wed Oct 15 08:22:56 PDT 2008

On Oct 14, 2008, at 11:43 PM, Mike Stump wrote:
> That statement was that:
>> float4 a;
>> float* ptr_z = (float*)(&a) + 3;
> ``violates strict aliasing``
> That assertion is wrong.  The docs says:
> @item may_alias
> Accesses to objects with types with this attribute are not subjected  
> to
> type-based alias analysis, but are instead assumed to be able to alias
> any other type of objects, just like the @code{char} type.
> clearly, is _m64 is to be treated as char, then, all stores before it
> are complete and no loads can be moved before it, unless you can't
> tell that this happened.  As for what it allows, it allows many
> things, including the original snippet that was said to violate strict
> aliasing.  I can't fathom any other reading, what am I missing?

Aha, gotcha.  I misunderstood the connection.

In any case, the important distinction I wanted to raise was that  
we're talking about how the IR *models a very specific case*, not  
*eliminating a capability* of the IR.


More information about the llvm-dev mailing list