diff --git a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp index ce6154fd610eb..5989c6e6ea30a 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp @@ -3060,14 +3060,10 @@ Instruction *InstCombinerImpl::visitShuffleVectorInst(ShuffleVectorInst &SVI) { unsigned SrcElemsPerTgtElem = TgtElemBitWidth / SrcElemBitWidth; assert(SrcElemsPerTgtElem); BegIdx /= SrcElemsPerTgtElem; - bool BCAlreadyExists = NewBCs.contains(CastSrcTy); - auto *NewBC = - BCAlreadyExists - ? NewBCs[CastSrcTy] - : Builder.CreateBitCast(V, CastSrcTy, SVI.getName() + ".bc"); - if (!BCAlreadyExists) - NewBCs[CastSrcTy] = NewBC; - auto *Ext = Builder.CreateExtractElement(NewBC, BegIdx, + auto [It, Inserted] = NewBCs.try_emplace(CastSrcTy); + if (Inserted) + It->second = Builder.CreateBitCast(V, CastSrcTy, SVI.getName() + ".bc"); + auto *Ext = Builder.CreateExtractElement(It->second, BegIdx, SVI.getName() + ".extract"); // The shufflevector isn't being replaced: the bitcast that used it // is. InstCombine will visit the newly-created instructions.