[llvm-dev] Using ConstantDataVector instead of ConstantVector
Friedman, Eli via llvm-dev
llvm-dev at lists.llvm.org
Wed Nov 9 09:54:50 PST 2016
On 11/9/2016 1:30 AM, Alex Susu via llvm-dev wrote:
> 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.
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
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
More information about the llvm-dev
mailing list