[LLVMdev] (GEP) Index validity

Evan Cheng evan.cheng at apple.com
Thu Jul 10 11:21:25 PDT 2008


I don't think this is right. According to llvm documentation:

The index types specified for the 'getelementptr' instruction depend  
on the pointer type that is being indexed into. Pointer and array  
types can use a 32-bit or 64-bit integer type but the value will  
always be sign extended to 64-bits. Structure and packed structure  
types require i32 constants.

Evan

On Jul 10, 2008, at 3:47 AM, Matthijs Kooijman wrote:

> Hi all,
>
> any comments about this patch? I'd like to get it out of my working  
> copy :-)
>
> Gr.
>
> Matthijs
>
>> Index: lib/VMCore/Type.cpp
>> ===================================================================
>> --- lib/VMCore/Type.cpp	(revision 53136)
>> +++ lib/VMCore/Type.cpp	(working copy)
>> @@ -394,9 +394,8 @@
>>
>> bool StructType::indexValid(const Value *V) const {
>>   // Structure indexes require 32-bit integer constants.
>> -  if (V->getType() == Type::Int32Ty)
>> -    if (const ConstantInt *CU = dyn_cast<ConstantInt>(V))
>> -      return indexValid(CU->getZExtValue());
>> +  if (const ConstantInt *CU = dyn_cast<ConstantInt>(V))
>> +    return indexValid(CU->getZExtValue());
>>   return false;
>> }
>>
>> @@ -1530,9 +1529,8 @@
>> }
>>
>> bool SequentialType::indexValid(const Value *V) const {
>> -  if (const IntegerType *IT = dyn_cast<IntegerType>(V->getType()))
>> -    return IT->getBitWidth() == 32 || IT->getBitWidth() == 64;
>> -  return false;
>> +  // Any integer value is allowed
>> +  return V->getType()->isInteger();
>> }
>>
>> namespace llvm {
>> Index: lib/Target/TargetData.cpp
>> ===================================================================
>> --- lib/Target/TargetData.cpp	(revision 53136)
>> +++ lib/Target/TargetData.cpp	(working copy)
>> @@ -553,8 +553,7 @@
>>     TI = gep_type_begin(ptrTy, Indices, Indices+NumIndices);
>>   for (unsigned CurIDX = 0; CurIDX != NumIndices; ++CurIDX, ++TI) {
>>     if (const StructType *STy = dyn_cast<StructType>(*TI)) {
>> -      assert(Indices[CurIDX]->getType() == Type::Int32Ty &&
>> -             "Illegal struct idx");
>> +      assert(isa<ConstantInt>(Indices[CurIDX]) && "Illegal struct  
>> idx");
>>       unsigned FieldNo = cast<ConstantInt>(Indices[CurIDX])- 
>> >getZExtValue();
>>
>>       // Get structure layout information...
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080710/50f14a5a/attachment.html>


More information about the llvm-dev mailing list