[LLVMdev] (GEP) Index validity
Matthijs Kooijman
matthijs at stdin.nl
Mon Jul 7 04:47:21 PDT 2008
Hi all,
I just found that TargetData also contains a similar assert, and that I forgot
a "return" in my previous patch.
Here's an updated patch, which allows to use any integer to index a
CompositeType. It seems this enables GEP to work with any integer value as
well, I tested indexing a struct with a i16 an i64 (also through llc). This
should still be adressed somewhere, unless we want to remove the i32 or i64
constraint from GEP.
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...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080707/e91dd8bc/attachment.sig>
More information about the llvm-dev
mailing list