[LLVMdev] "why have a vector type"

Chris Lattner clattner at apple.com
Mon Feb 14 16:46:36 PST 2011


On Feb 14, 2011, at 4:32 PM, Andrew Clinton wrote:

> I'm just suggesting that from the perspective of the LLVM IR there 
> doesn't seem to be a necessary semantic difference between arrays and 
> vectors.  Arrays provide a superset of the functionality available for 
> vectors.  I would be happy if the code generator used 4x32bit vectors 
> for basic math on [4xfloat] arrays, and fell back to something less 
> efficient if the user decided to dynamically index it.  However, maybe 
> this is more work for the code generator than is currently feasible.

You could make the same argument for arrays and structs: {i32,i32,i32,i32} is (almost) semantically equivalent to [4 x i32].  Similarly, pointers and integers are semantically very similar.  You could even say that an i32 and f32 should be the same type and just have different operations available on them.  This would map naturally to SSE for example.

The answer here is that having these differentiated in the type system makes analysis, optimization, and code generation easier.  Having explicit vector types is definitely goodness.

-Chris

> 
> On 02/14/2011 06:44 PM, Villmow, Micah wrote:
>> Andrew,
>>  This is one area of LLVM that maps very nicely to our GPU architecture. A vector is a native data type on these architectures. For example, on AMD's GPUs, the native type is 4x32bit vector with sub-components. Each of the individual 32bits can be indexed separately, but not dynamically. This is a big difference from an array of 32bit values. So there are cases where the meaning of the two are different on modern hardware.
>> 
>> Micah
>> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list