diff options
Diffstat (limited to 'devel/llvm60/files/patch-head-r331065.diff')
-rw-r--r-- | devel/llvm60/files/patch-head-r331065.diff | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/devel/llvm60/files/patch-head-r331065.diff b/devel/llvm60/files/patch-head-r331065.diff deleted file mode 100644 index 6976ee83460f..000000000000 --- a/devel/llvm60/files/patch-head-r331065.diff +++ /dev/null @@ -1,88 +0,0 @@ -r331065 | dim | 2018-03-16 18:50:44 +0100 (Fri, 16 Mar 2018) | 17 lines - -Pull in r327638 from upstream llvm trunk (by Matthew Simpson): - - [ConstantFolding, InstSimplify] Handle more vector GEPs - - This patch addresses some additional cases where the compiler crashes - upon encountering vector GEPs. This should fix PR36116. - - Differential Revision: https://reviews.llvm.org/D44219 - Reference: https://bugs.llvm.org/show_bug.cgi?id=36116 - -This fixes an assertion when building the emulators/snes9x port. - -Reported by: jbeich -PR: 225471 -MFC after: 3 months -X-MFC-With: r327952 - -Index: lib/Analysis/InstructionSimplify.cpp -=================================================================== ---- lib/Analysis/InstructionSimplify.cpp (revision 331064) -+++ lib/Analysis/InstructionSimplify.cpp (revision 331065) -@@ -3697,7 +3697,7 @@ static Value *SimplifyGEPInst(Type *SrcTy, ArrayRe - - if (Ops.size() == 2) { - // getelementptr P, 0 -> P. -- if (match(Ops[1], m_Zero())) -+ if (match(Ops[1], m_Zero()) && Ops[0]->getType() == GEPTy) - return Ops[0]; - - Type *Ty = SrcTy; -@@ -3706,7 +3706,7 @@ static Value *SimplifyGEPInst(Type *SrcTy, ArrayRe - uint64_t C; - uint64_t TyAllocSize = Q.DL.getTypeAllocSize(Ty); - // getelementptr P, N -> P if P points to a type of zero size. -- if (TyAllocSize == 0) -+ if (TyAllocSize == 0 && Ops[0]->getType() == GEPTy) - return Ops[0]; - - // The following transforms are only safe if the ptrtoint cast -Index: lib/IR/ConstantFold.cpp -=================================================================== ---- lib/IR/ConstantFold.cpp (revision 331064) -+++ lib/IR/ConstantFold.cpp (revision 331065) -@@ -2018,8 +2018,16 @@ static bool isInBoundsIndices(ArrayRef<IndexTy> Id - - // If the first index is one and all the rest are zero, it's in bounds, - // by the one-past-the-end rule. -- if (!cast<ConstantInt>(Idxs[0])->isOne()) -- return false; -+ if (auto *CI = dyn_cast<ConstantInt>(Idxs[0])) { -+ if (!CI->isOne()) -+ return false; -+ } else { -+ auto *CV = cast<ConstantDataVector>(Idxs[0]); -+ CI = dyn_cast_or_null<ConstantInt>(CV->getSplatValue()); -+ if (!CI || !CI->isOne()) -+ return false; -+ } -+ - for (unsigned i = 1, e = Idxs.size(); i != e; ++i) - if (!cast<Constant>(Idxs[i])->isNullValue()) - return false; -@@ -2049,15 +2057,18 @@ Constant *llvm::ConstantFoldGetElementPtr(Type *Po - ArrayRef<Value *> Idxs) { - if (Idxs.empty()) return C; - -- if (isa<UndefValue>(C)) { -- Type *GEPTy = GetElementPtrInst::getGEPReturnType( -- C, makeArrayRef((Value * const *)Idxs.data(), Idxs.size())); -+ Type *GEPTy = GetElementPtrInst::getGEPReturnType( -+ C, makeArrayRef((Value *const *)Idxs.data(), Idxs.size())); -+ -+ if (isa<UndefValue>(C)) - return UndefValue::get(GEPTy); -- } - - Constant *Idx0 = cast<Constant>(Idxs[0]); - if (Idxs.size() == 1 && (Idx0->isNullValue() || isa<UndefValue>(Idx0))) -- return C; -+ return GEPTy->isVectorTy() && !C->getType()->isVectorTy() -+ ? ConstantVector::getSplat( -+ cast<VectorType>(GEPTy)->getNumElements(), C) -+ : C; - - if (C->isNullValue()) { - bool isNull = true; |