Using ConstantDataVector instead of ConstantVector

Hello.
     I'm curious why can't I convert a Value like
       <16 x i16> <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2... i16 2>
      to ConstantVector - using llvm::dyn_cast<llvm::ConstantVector>() returns NULL.

     However, converting it with dyn_cast to ConstantDataVector fortunately works.

     Note that at http://llvm.org/docs/doxygen/html/classllvm_1_1ConstantDataVector.html it is written "A vector constant whose element type is a simple 1/2/4/8-byte integer or float/double", etc. This is a bit misleading, since vectors of bigger sizes can be used.

   Thank you,
     Alex

I think you somehow found some old doxygen pages? http://llvm.org/doxygen/classllvm_1_1Constant.html is what it looks like on trunk.

The class hierarchy is set up the way it is because it's convenient for the implementation; essentially, ConstantAggregate subclasses are constants which use other constants, and ConstantData subclasses don't use other constants.

You can use Constant::getAggregateElement() if you need to iterate over the elements of a constant of vector type.

-Eli

This is the *individual element* type, did you misread and thought it was the number of elements in the vector? Or to total byte size of the vector?

The implementation is clear limiting to these elements AFAICT.