[PATCH] Fix assert with GEP ptr vector indexing structs
Matt Arsenault
arsenm2 at gmail.com
Fri Aug 16 18:16:33 PDT 2013
On Aug 16, 2013, at 17:51 , Eli Friedman <eli.friedman at gmail.com> wrote:
> On Fri, Aug 16, 2013 at 5:21 PM, Matt Arsenault <Matthew.Arsenault at amd.com> wrote:
> Also fix it calculating the wrong value. The struct index is not a ConstantInt, so it was being interpreted as an array index.
>
> http://llvm-reviews.chandlerc.com/D1431
>
> Files:
> include/llvm/Transforms/Utils/Local.h
> lib/Analysis/ValueTracking.cpp
> test/Transforms/InstCombine/getelementptr.ll
>
> Index: include/llvm/Transforms/Utils/Local.h
> ===================================================================
> --- include/llvm/Transforms/Utils/Local.h
> +++ include/llvm/Transforms/Utils/Local.h
> @@ -203,12 +203,17 @@
> ++i, ++GTI) {
> Value *Op = *i;
> uint64_t Size = TD.getTypeAllocSize(GTI.getIndexedType()) & PtrSizeMask;
> - if (ConstantInt *OpC = dyn_cast<ConstantInt>(Op)) {
> - if (OpC->isZero()) continue;
> + if (Constant *OpC = dyn_cast<Constant>(Op)) {
> + if (OpC->isZeroValue())
> + continue;
> +
> + if (OpC->getType()->isVectorTy())
> + OpC = OpC->getSplatValue();
>
> What if getSplatValue() returns null?
It isn't allowed to have a vector struct index with different valued elements, so this should always work
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130816/f9bfb794/attachment.html>
More information about the llvm-commits
mailing list