svn commit: r244598 - head/contrib/llvm/lib/Transforms/Scalar

Dimitry Andric dim at FreeBSD.org
Sat Dec 22 20:16:21 UTC 2012


Author: dim
Date: Sat Dec 22 20:16:21 2012
New Revision: 244598
URL: http://svnweb.freebsd.org/changeset/base/244598

Log:
  Pull in r170353 from upstream llvm trunk:
  
    Fix another SROA crasher, PR14601.
  
    This was a silly oversight, we weren't pruning allocas which were used
    by variable-length memory intrinsics from the set that could be widened
    and promoted as integers. Fix that.
  
  This should fix the following assertion failure:
  
    Assertion failed: (CanSROA), function visitUsers, file
    /usr/src/lib/clang/libllvmscalaropts/../../../contrib/llvm/lib/Transforms/Scalar/SROA.cpp,
    line 2395.
  
  Reported by:	gerald

Modified:
  head/contrib/llvm/lib/Transforms/Scalar/SROA.cpp

Modified: head/contrib/llvm/lib/Transforms/Scalar/SROA.cpp
==============================================================================
--- head/contrib/llvm/lib/Transforms/Scalar/SROA.cpp	Sat Dec 22 20:05:42 2012	(r244597)
+++ head/contrib/llvm/lib/Transforms/Scalar/SROA.cpp	Sat Dec 22 20:16:21 2012	(r244598)
@@ -2224,7 +2224,7 @@ static bool isIntegerWideningViable(cons
           !canConvertValue(TD, ValueTy, AllocaTy))
         return false;
     } else if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(I->U->getUser())) {
-      if (MI->isVolatile())
+      if (MI->isVolatile() || !isa<Constant>(MI->getLength()))
         return false;
       if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(I->U->getUser())) {
         const AllocaPartitioning::MemTransferOffsets &MTO


More information about the svn-src-head mailing list