From cf348f6a2cac654bfc97dda964c319066bb9c961 Mon Sep 17 00:00:00 2001 From: Chenbing Zheng Date: Fri, 20 May 2022 09:56:33 +0800 Subject: [PATCH] [InstCombine] [NFC] Use a pattern matcher for ExtractElementInst Reviewed By: RKSimon, rampitec Differential Revision: https://reviews.llvm.org/D125857 --- llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp index 764c8df..fd76ea6 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp @@ -2350,9 +2350,9 @@ static Value *optimizeIntegerToVectorInsertions(BitCastInst &CI, /// usually not type-specific like scalar integer or scalar floating-point. static Instruction *canonicalizeBitCastExtElt(BitCastInst &BitCast, InstCombinerImpl &IC) { - // TODO: Create and use a pattern matcher for ExtractElementInst. - auto *ExtElt = dyn_cast(BitCast.getOperand(0)); - if (!ExtElt || !ExtElt->hasOneUse()) + Value *VecOp, *Index; + if (!match(BitCast.getOperand(0), + m_OneUse(m_ExtractElt(m_Value(VecOp), m_Value(Index))))) return nullptr; // The bitcast must be to a vectorizable type, otherwise we can't make a new @@ -2361,10 +2361,10 @@ static Instruction *canonicalizeBitCastExtElt(BitCastInst &BitCast, if (!VectorType::isValidElementType(DestType)) return nullptr; - auto *NewVecType = VectorType::get(DestType, ExtElt->getVectorOperandType()); - auto *NewBC = IC.Builder.CreateBitCast(ExtElt->getVectorOperand(), - NewVecType, "bc"); - return ExtractElementInst::Create(NewBC, ExtElt->getIndexOperand()); + auto *NewVecType = + VectorType::get(DestType, cast(VecOp->getType())); + auto *NewBC = IC.Builder.CreateBitCast(VecOp, NewVecType, "bc"); + return ExtractElementInst::Create(NewBC, Index); } /// Change the type of a bitwise logic operation if we can eliminate a bitcast. -- 2.7.4