• Home
  • Raw
  • Download

Lines Matching refs:EI

68 Instruction *InstCombiner::scalarizePHI(ExtractElementInst &EI, PHINode *PN) {  in scalarizePHI()  argument
77 if (EI.getIndexOperand() == EU->getIndexOperand()) in scalarizePHI()
101 PHINode::Create(EI.getType(), PN->getNumIncomingValues(), ""), *PN)); in scalarizePHI()
106 Value *Elt = EI.getIndexOperand(); in scalarizePHI()
143 return &EI; in scalarizePHI()
146 Instruction *InstCombiner::visitExtractElementInst(ExtractElementInst &EI) { in visitExtractElementInst() argument
148 EI.getVectorOperand(), EI.getIndexOperand(), DL, TLI, DT, AC)) in visitExtractElementInst()
149 return replaceInstUsesWith(EI, V); in visitExtractElementInst()
153 if (Constant *C = dyn_cast<Constant>(EI.getOperand(0))) in visitExtractElementInst()
155 return replaceInstUsesWith(EI, C->getAggregateElement(0U)); in visitExtractElementInst()
159 if (ConstantInt *IdxC = dyn_cast<ConstantInt>(EI.getOperand(1))) { in visitExtractElementInst()
161 unsigned VectorWidth = EI.getVectorOperandType()->getNumElements(); in visitExtractElementInst()
169 if (EI.getOperand(0)->hasOneUse() && VectorWidth != 1) { in visitExtractElementInst()
173 if (Value *V = SimplifyDemandedVectorElts(EI.getOperand(0), DemandedMask, in visitExtractElementInst()
175 EI.setOperand(0, V); in visitExtractElementInst()
176 return &EI; in visitExtractElementInst()
183 if (BitCastInst *BCI = dyn_cast<BitCastInst>(EI.getOperand(0))) { in visitExtractElementInst()
187 return new BitCastInst(Elt, EI.getType()); in visitExtractElementInst()
192 if (PHINode *PN = dyn_cast<PHINode>(EI.getOperand(0))) { in visitExtractElementInst()
193 Instruction *scalarPHI = scalarizePHI(EI, PN); in visitExtractElementInst()
199 if (Instruction *I = dyn_cast<Instruction>(EI.getOperand(0))) { in visitExtractElementInst()
204 cheapToScalarize(BO, isa<ConstantInt>(EI.getOperand(1)))) { in visitExtractElementInst()
206 Builder->CreateExtractElement(BO->getOperand(0), EI.getOperand(1), in visitExtractElementInst()
207 EI.getName()+".lhs"); in visitExtractElementInst()
209 Builder->CreateExtractElement(BO->getOperand(1), EI.getOperand(1), in visitExtractElementInst()
210 EI.getName()+".rhs"); in visitExtractElementInst()
216 if (IE->getOperand(2) == EI.getOperand(1)) in visitExtractElementInst()
217 return replaceInstUsesWith(EI, IE->getOperand(1)); in visitExtractElementInst()
220 if (isa<Constant>(IE->getOperand(2)) && isa<Constant>(EI.getOperand(1))) { in visitExtractElementInst()
221 Worklist.AddValue(EI.getOperand(0)); in visitExtractElementInst()
222 EI.setOperand(0, IE->getOperand(0)); in visitExtractElementInst()
223 return &EI; in visitExtractElementInst()
228 if (ConstantInt *Elt = dyn_cast<ConstantInt>(EI.getOperand(1))) { in visitExtractElementInst()
235 return replaceInstUsesWith(EI, UndefValue::get(EI.getType())); in visitExtractElementInst()
242 Type *Int32Ty = Type::getInt32Ty(EI.getContext()); in visitExtractElementInst()
253 EI.getIndexOperand()); in visitExtractElementInst()
255 return CastInst::Create(CI->getOpcode(), EE, EI.getType()); in visitExtractElementInst()
272 EI.getIndexOperand(), in visitExtractElementInst()
278 EI.getIndexOperand(), in visitExtractElementInst()
283 EI.getIndexOperand(), in visitExtractElementInst()
339 } else if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)){ in collectSingleShuffleElements() local
340 if (isa<ConstantInt>(EI->getOperand(1))) { in collectSingleShuffleElements()
342 cast<ConstantInt>(EI->getOperand(1))->getZExtValue(); in collectSingleShuffleElements()
346 if (EI->getOperand(0) == LHS || EI->getOperand(0) == RHS) { in collectSingleShuffleElements()
351 if (EI->getOperand(0) == LHS) { in collectSingleShuffleElements()
356 assert(EI->getOperand(0) == RHS); in collectSingleShuffleElements()
474 if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)) { in collectShuffleElements() local
475 if (isa<ConstantInt>(EI->getOperand(1)) && isa<ConstantInt>(IdxOp)) { in collectShuffleElements()
477 cast<ConstantInt>(EI->getOperand(1))->getZExtValue(); in collectShuffleElements()
482 if (EI->getOperand(0) == PermittedRHS || PermittedRHS == nullptr) { in collectShuffleElements()
483 Value *RHS = EI->getOperand(0); in collectShuffleElements()
490 replaceExtractElements(IEI, EI, IC); in collectShuffleElements()
510 EI->getOperand(0)->getType()->getVectorNumElements(); in collectShuffleElements()
515 return std::make_pair(EI->getOperand(0), PermittedRHS); in collectShuffleElements()
520 if (EI->getOperand(0)->getType() == PermittedRHS->getType() && in collectShuffleElements()
521 collectSingleShuffleElements(IEI, EI->getOperand(0), PermittedRHS, in collectShuffleElements()
523 return std::make_pair(EI->getOperand(0), PermittedRHS); in collectShuffleElements()
580 if (ExtractElementInst *EI = dyn_cast<ExtractElementInst>(ScalarOp)) { in visitInsertElementInst() local
581 if (isa<ConstantInt>(EI->getOperand(1)) && isa<ConstantInt>(IdxOp)) { in visitInsertElementInst()
584 EI->getOperand(0)->getType()->getVectorNumElements(); in visitInsertElementInst()
586 cast<ConstantInt>(EI->getOperand(1))->getZExtValue(); in visitInsertElementInst()
597 if (EI->getOperand(0) == VecOp && ExtractedIdx == InsertedIdx) in visitInsertElementInst()