[LLVMdev] Initialising global Array

Dan Gohman gohman at apple.com
Tue Jul 7 10:06:17 PDT 2009


On Jun 18, 2009, at 6:22 AM, Andreas Neustifter wrote:


> Hi,
>
> I try to create a array that has a nonzero initialiser:
>
> What i do is, first create the array type.
>
>
>> const ArrayType *ATy = ArrayType::get(Type::Int32Ty, NumEdges);
>>
>
> Then create some constant values for the initializer.
>
>
>> std::vector<Constant*> Initializer; Initializer.reserve(NumEdges);

It looks like you may be using reserve when resize is needed.

>>
>> APInt zero(32,0);      Constant* zeroc = ConstantInt::get(zero);
>>
>> APInt minusone(32,-1); Constant* minusonec = ConstantInt::get 
>> (minusone);
>>
>
> Create the global array, there is no initializer yet.
>
>
>> GlobalVariable *Counters =
>>
>>  new GlobalVariable(ATy, false, GlobalValue::InternalLinkage,
>>
>>                     Constant::getNullValue(ATy),  
>> "OptimalEdgeProfCounters", &M);
>>
>
> Then exactly "NumEdges" constants are pushed to the "Initializer":
>
>
>> Initializer[i] = zeroc;

If Initializer hasn't been resized, this access will be
out of bounds.

Dan




More information about the llvm-dev mailing list