diff options
author | dim <dim@FreeBSD.org> | 2015-09-06 18:34:38 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2015-09-06 18:34:38 +0000 |
commit | 9fcebda97d0cb3d7a2235d2ad835c3a2679e7683 (patch) | |
tree | 461d3cf041290f4a99740d540bf0973d6084f98e /lib/Transforms/Scalar/Scalarizer.cpp | |
parent | c5dd590220d0afe971d065bfe9324f549dd00968 (diff) | |
download | FreeBSD-src-9fcebda97d0cb3d7a2235d2ad835c3a2679e7683.zip FreeBSD-src-9fcebda97d0cb3d7a2235d2ad835c3a2679e7683.tar.gz |
Import llvm 3.7.0 release (r246257).
Diffstat (limited to 'lib/Transforms/Scalar/Scalarizer.cpp')
-rw-r--r-- | lib/Transforms/Scalar/Scalarizer.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/Scalarizer.cpp b/lib/Transforms/Scalar/Scalarizer.cpp index d55dc6a..0493003 100644 --- a/lib/Transforms/Scalar/Scalarizer.cpp +++ b/lib/Transforms/Scalar/Scalarizer.cpp @@ -227,10 +227,16 @@ Value *Scatterer::operator[](unsigned I) { if (!Idx) break; unsigned J = Idx->getZExtValue(); - CV[J] = Insert->getOperand(1); V = Insert->getOperand(0); - if (I == J) + if (I == J) { + CV[J] = Insert->getOperand(1); return CV[J]; + } else if (!CV[J]) { + // Only cache the first entry we find for each index we're not actively + // searching for. This prevents us from going too far up the chain and + // caching incorrect entries. + CV[J] = Insert->getOperand(1); + } } CV[I] = Builder.CreateExtractElement(V, Builder.getInt32(I), V->getName() + ".i" + Twine(I)); |