Lines Matching defs:Ext0

98   ExtractElementInst *getShuffleExtract(ExtractElementInst *Ext0,
101 bool isExtractExtractCheap(ExtractElementInst *Ext0, ExtractElementInst *Ext1,
105 void foldExtExtCmp(ExtractElementInst *Ext0, ExtractElementInst *Ext1,
107 void foldExtExtBinop(ExtractElementInst *Ext0, ExtractElementInst *Ext1,
368 ExtractElementInst *Ext0, ExtractElementInst *Ext1,
370 auto *Index0C = dyn_cast<ConstantInt>(Ext0->getIndexOperand());
381 Type *VecTy = Ext0->getVectorOperand()->getType();
384 TTI.getVectorInstrCost(*Ext0, VecTy, CostKind, Index0);
396 return Ext0;
405 return Ext0;
408 return Index0 > Index1 ? Ext0 : Ext1;
416 bool VectorCombine::isExtractExtractCheap(ExtractElementInst *Ext0,
421 auto *Ext0IndexC = dyn_cast<ConstantInt>(Ext0->getIndexOperand());
426 Value *Ext0Src = Ext0->getVectorOperand();
428 Type *ScalarTy = Ext0->getType();
453 TTI.getVectorInstrCost(*Ext0, VecTy, CostKind, Ext0Index);
458 // For example, if Ext0 is more expensive:
459 // opcode (extelt V0, Ext0), (ext V1, Ext1) -->
460 // extelt (opcode (splat V0, Ext0), V1), Ext1
476 bool HasUseTax = Ext0 == Ext1 ? !Ext0->hasNUses(2)
477 : !Ext0->hasOneUse() || !Ext1->hasOneUse();
485 !Ext0->hasOneUse() * Extract0Cost +
489 ConvertToShuffle = getShuffleExtract(Ext0, Ext1, PreferredExtractIndex);
561 void VectorCombine::foldExtExtCmp(ExtractElementInst *Ext0,
564 assert(cast<ConstantInt>(Ext0->getIndexOperand())->getZExtValue() ==
571 Value *V0 = Ext0->getVectorOperand(), *V1 = Ext1->getVectorOperand();
573 Value *NewExt = Builder.CreateExtractElement(VecCmp, Ext0->getIndexOperand());
580 void VectorCombine::foldExtExtBinop(ExtractElementInst *Ext0,
583 assert(cast<ConstantInt>(Ext0->getIndexOperand())->getZExtValue() ==
589 Value *V0 = Ext0->getVectorOperand(), *V1 = Ext1->getVectorOperand();
598 Value *NewExt = Builder.CreateExtractElement(VecBO, Ext0->getIndexOperand());
627 auto *Ext0 = cast<ExtractElementInst>(I0);
635 if (isExtractExtractCheap(Ext0, Ext1, I, ExtractToChange, InsertIndex))
639 unsigned CheapExtractIdx = ExtractToChange == Ext0 ? C1 : C0;
644 if (ExtractToChange == Ext0)
645 Ext0 = NewExtract;
651 foldExtExtCmp(Ext0, Ext1, I);
653 foldExtExtBinop(Ext0, Ext1, I);
655 Worklist.push(Ext0);
1116 auto *Ext0 = cast<ExtractElementInst>(I0);
1118 ExtractElementInst *ConvertToShuf = getShuffleExtract(Ext0, Ext1, CostKind);
1121 assert((ConvertToShuf == Ext0 || ConvertToShuf == Ext1) &&
1134 TTI.getVectorInstrCost(*Ext0, VecTy, CostKind, Index0);
1148 int CheapIndex = ConvertToShuf == Ext0 ? Index1 : Index0;
1149 int ExpensiveIndex = ConvertToShuf == Ext0 ? Index0 : Index1;
1159 NewCost += TTI.getVectorInstrCost(*Ext0, CmpTy, CostKind, CheapIndex);
1160 NewCost += Ext0->hasOneUse() ? 0 : Ext0Cost;
1176 Value *LHS = ConvertToShuf == Ext0 ? Shuf : VCmp;
1177 Value *RHS = ConvertToShuf == Ext0 ? VCmp : Shuf;