Lines Matching refs:EI
116 Instruction *InstCombiner::scalarizePHI(ExtractElementInst &EI, PHINode *PN) { in scalarizePHI() argument
126 if (PHIUser == cast<Instruction>(&EI)) in scalarizePHI()
139 PHINode::Create(EI.getType(), PN->getNumIncomingValues(), ""), *PN)); in scalarizePHI()
144 Value *Elt = EI.getIndexOperand(); in scalarizePHI()
177 return ReplaceInstUsesWith(EI, scalarPHI); in scalarizePHI()
180 Instruction *InstCombiner::visitExtractElementInst(ExtractElementInst &EI) { in visitExtractElementInst() argument
183 if (Constant *C = dyn_cast<Constant>(EI.getOperand(0))) in visitExtractElementInst()
185 return ReplaceInstUsesWith(EI, C->getAggregateElement(0U)); in visitExtractElementInst()
189 if (ConstantInt *IdxC = dyn_cast<ConstantInt>(EI.getOperand(1))) { in visitExtractElementInst()
191 unsigned VectorWidth = EI.getVectorOperandType()->getNumElements(); in visitExtractElementInst()
196 return ReplaceInstUsesWith(EI, UndefValue::get(EI.getType())); in visitExtractElementInst()
201 if (EI.getOperand(0)->hasOneUse() && VectorWidth != 1) { in visitExtractElementInst()
205 if (Value *V = SimplifyDemandedVectorElts(EI.getOperand(0), DemandedMask, in visitExtractElementInst()
207 EI.setOperand(0, V); in visitExtractElementInst()
208 return &EI; in visitExtractElementInst()
212 if (Value *Elt = FindScalarElement(EI.getOperand(0), IndexVal)) in visitExtractElementInst()
213 return ReplaceInstUsesWith(EI, Elt); in visitExtractElementInst()
218 if (BitCastInst *BCI = dyn_cast<BitCastInst>(EI.getOperand(0))) { in visitExtractElementInst()
222 return new BitCastInst(Elt, EI.getType()); in visitExtractElementInst()
227 if (PHINode *PN = dyn_cast<PHINode>(EI.getOperand(0))) { in visitExtractElementInst()
228 Instruction *scalarPHI = scalarizePHI(EI, PN); in visitExtractElementInst()
234 if (Instruction *I = dyn_cast<Instruction>(EI.getOperand(0))) { in visitExtractElementInst()
239 CheapToScalarize(BO, isa<ConstantInt>(EI.getOperand(1)))) { in visitExtractElementInst()
241 Builder->CreateExtractElement(BO->getOperand(0), EI.getOperand(1), in visitExtractElementInst()
242 EI.getName()+".lhs"); in visitExtractElementInst()
244 Builder->CreateExtractElement(BO->getOperand(1), EI.getOperand(1), in visitExtractElementInst()
245 EI.getName()+".rhs"); in visitExtractElementInst()
250 if (IE->getOperand(2) == EI.getOperand(1)) in visitExtractElementInst()
251 return ReplaceInstUsesWith(EI, IE->getOperand(1)); in visitExtractElementInst()
254 if (isa<Constant>(IE->getOperand(2)) && isa<Constant>(EI.getOperand(1))) { in visitExtractElementInst()
255 Worklist.AddValue(EI.getOperand(0)); in visitExtractElementInst()
256 EI.setOperand(0, IE->getOperand(0)); in visitExtractElementInst()
257 return &EI; in visitExtractElementInst()
262 if (ConstantInt *Elt = dyn_cast<ConstantInt>(EI.getOperand(1))) { in visitExtractElementInst()
269 return ReplaceInstUsesWith(EI, UndefValue::get(EI.getType())); in visitExtractElementInst()
276 Type *Int32Ty = Type::getInt32Ty(EI.getContext()); in visitExtractElementInst()
286 EI.getIndexOperand()); in visitExtractElementInst()
288 return CastInst::Create(CI->getOpcode(), EE, EI.getType()); in visitExtractElementInst()
304 EI.getIndexOperand(), in visitExtractElementInst()
310 EI.getIndexOperand(), in visitExtractElementInst()
315 EI.getIndexOperand(), in visitExtractElementInst()
372 } else if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)){ in CollectSingleShuffleElements() local
373 if (isa<ConstantInt>(EI->getOperand(1))) { in CollectSingleShuffleElements()
375 cast<ConstantInt>(EI->getOperand(1))->getZExtValue(); in CollectSingleShuffleElements()
379 if (EI->getOperand(0) == LHS || EI->getOperand(0) == RHS) { in CollectSingleShuffleElements()
384 if (EI->getOperand(0) == LHS) { in CollectSingleShuffleElements()
389 assert(EI->getOperand(0) == RHS); in CollectSingleShuffleElements()
438 if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)) { in CollectShuffleElements() local
439 if (isa<ConstantInt>(EI->getOperand(1)) && isa<ConstantInt>(IdxOp)) { in CollectShuffleElements()
441 cast<ConstantInt>(EI->getOperand(1))->getZExtValue(); in CollectShuffleElements()
446 if (EI->getOperand(0) == PermittedRHS || PermittedRHS == nullptr) { in CollectShuffleElements()
447 Value *RHS = EI->getOperand(0); in CollectShuffleElements()
470 EI->getOperand(0)->getType()->getVectorNumElements(); in CollectShuffleElements()
475 return std::make_pair(EI->getOperand(0), PermittedRHS); in CollectShuffleElements()
480 if (EI->getOperand(0)->getType() == PermittedRHS->getType() && in CollectShuffleElements()
481 CollectSingleShuffleElements(IEI, EI->getOperand(0), PermittedRHS, in CollectShuffleElements()
483 return std::make_pair(EI->getOperand(0), PermittedRHS); in CollectShuffleElements()
540 if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)) { in visitInsertElementInst() local
541 if (isa<ConstantInt>(EI->getOperand(1)) && isa<ConstantInt>(IdxOp)) { in visitInsertElementInst()
544 EI->getOperand(0)->getType()->getVectorNumElements(); in visitInsertElementInst()
546 cast<ConstantInt>(EI->getOperand(1))->getZExtValue(); in visitInsertElementInst()
557 if (EI->getOperand(0) == VecOp && ExtractedIdx == InsertedIdx) in visitInsertElementInst()