From fcda998ab2f44aa1f8015b3e8084de3a442d7a9e Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 18 Sep 2007 01:54:42 +0000 Subject: Fix PR1657 llvm-svn: 42075 --- llvm/lib/Transforms/Scalar/LICM.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp index ac927da07e3..6c5976ad3a9 100644 --- a/llvm/lib/Transforms/Scalar/LICM.cpp +++ b/llvm/lib/Transforms/Scalar/LICM.cpp @@ -791,6 +791,14 @@ void LICM::FindPromotableValuesInLoop( break; } + // If GEP base is NULL then the calculated address used by Store or + // Load instruction is invalid. Do not promote this value because + // it may expose load and store instruction that are covered by + // condition which may not yet folded. + if (GetElementPtrInst *GEP = dyn_cast(V)) + if (isa(GEP->getOperand(0))) + PointerOk = false; + if (PointerOk) { const Type *Ty = cast(V->getType())->getElementType(); AllocaInst *AI = new AllocaInst(Ty, 0, V->getName()+".tmp", FnStart); -- cgit v1.2.3