diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Transforms/Scalar/Scalarizer.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Transforms/Scalar/Scalarizer.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/contrib/llvm-project/llvm/lib/Transforms/Scalar/Scalarizer.cpp b/contrib/llvm-project/llvm/lib/Transforms/Scalar/Scalarizer.cpp index 851bd79cd6d8..c95984fe198f 100644 --- a/contrib/llvm-project/llvm/lib/Transforms/Scalar/Scalarizer.cpp +++ b/contrib/llvm-project/llvm/lib/Transforms/Scalar/Scalarizer.cpp @@ -398,7 +398,8 @@ void ScalarizerVisitor::gather(Instruction *Op, const ValueVector &CV) { continue; Instruction *Old = cast<Instruction>(V); - CV[I]->takeName(Old); + if (isa<Instruction>(CV[I])) + CV[I]->takeName(Old); Old->replaceAllUsesWith(CV[I]); PotentiallyDeadInstrs.emplace_back(Old); } @@ -732,7 +733,7 @@ bool ScalarizerVisitor::visitBitCastInst(BitCastInst &BCI) { auto *MidTy = FixedVectorType::get(SrcVT->getElementType(), FanIn); unsigned Op0I = 0; for (unsigned ResI = 0; ResI < DstNumElems; ++ResI) { - Value *V = UndefValue::get(MidTy); + Value *V = PoisonValue::get(MidTy); for (unsigned MidI = 0; MidI < FanIn; ++MidI) V = Builder.CreateInsertElement(V, Op0[Op0I++], Builder.getInt32(MidI), BCI.getName() + ".i" + Twine(ResI) @@ -931,7 +932,7 @@ bool ScalarizerVisitor::finish() { if (!Op->use_empty()) { // The value is still needed, so recreate it using a series of // InsertElements. - Value *Res = UndefValue::get(Op->getType()); + Value *Res = PoisonValue::get(Op->getType()); if (auto *Ty = dyn_cast<VectorType>(Op->getType())) { BasicBlock *BB = Op->getParent(); unsigned Count = cast<FixedVectorType>(Ty)->getNumElements(); @@ -941,13 +942,13 @@ bool ScalarizerVisitor::finish() { for (unsigned I = 0; I < Count; ++I) Res = Builder.CreateInsertElement(Res, CV[I], Builder.getInt32(I), Op->getName() + ".upto" + Twine(I)); + Res->takeName(Op); } else { assert(CV.size() == 1 && Op->getType() == CV[0]->getType()); Res = CV[0]; if (Op == Res) continue; } - Res->takeName(Op); Op->replaceAllUsesWith(Res); } PotentiallyDeadInstrs.emplace_back(Op); |