• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/llvm-project/llvm/lib/Transforms/Vectorize/

Lines Matching defs:Ext0

68   ExtractElementInst *getShuffleExtract(ExtractElementInst *Ext0,
71 bool isExtractExtractCheap(ExtractElementInst *Ext0, ExtractElementInst *Ext1,
75 void foldExtExtCmp(ExtractElementInst *Ext0, ExtractElementInst *Ext1,
77 void foldExtExtBinop(ExtractElementInst *Ext0, ExtractElementInst *Ext1,
94 ExtractElementInst *Ext0, ExtractElementInst *Ext1,
96 assert(isa<ConstantInt>(Ext0->getIndexOperand()) &&
100 unsigned Index0 = cast<ConstantInt>(Ext0->getIndexOperand())->getZExtValue();
107 Type *VecTy = Ext0->getVectorOperand()->getType();
109 int Cost0 = TTI.getVectorInstrCost(Ext0->getOpcode(), VecTy, Index0);
116 return Ext0;
125 return Ext0;
128 return Index0 > Index1 ? Ext0 : Ext1;
136 bool VectorCombine::isExtractExtractCheap(ExtractElementInst *Ext0,
141 assert(isa<ConstantInt>(Ext0->getOperand(1)) &&
144 Type *ScalarTy = Ext0->getType();
145 auto *VecTy = cast<VectorType>(Ext0->getOperand(0)->getType());
164 unsigned Ext0Index = cast<ConstantInt>(Ext0->getOperand(1))->getZExtValue();
173 // For example, if Ext0 is more expensive:
174 // opcode (extelt V0, Ext0), (ext V1, Ext1) -->
175 // extelt (opcode (splat V0, Ext0), V1), Ext1
184 if (Ext0->getOperand(0) == Ext1->getOperand(0) && Ext0Index == Ext1Index) {
189 bool HasUseTax = Ext0 == Ext1 ? !Ext0->hasNUses(2)
190 : !Ext0->hasOneUse() || !Ext1->hasOneUse();
198 !Ext0->hasOneUse() * Extract0Cost +
202 ConvertToShuffle = getShuffleExtract(Ext0, Ext1, PreferredExtractIndex);
261 void VectorCombine::foldExtExtCmp(ExtractElementInst *Ext0,
264 assert(cast<ConstantInt>(Ext0->getIndexOperand())->getZExtValue() ==
271 Value *V0 = Ext0->getVectorOperand(), *V1 = Ext1->getVectorOperand();
273 Value *NewExt = Builder.CreateExtractElement(VecCmp, Ext0->getIndexOperand());
280 void VectorCombine::foldExtExtBinop(ExtractElementInst *Ext0,
283 assert(cast<ConstantInt>(Ext0->getIndexOperand())->getZExtValue() ==
289 Value *V0 = Ext0->getVectorOperand(), *V1 = Ext1->getVectorOperand();
298 Value *NewExt = Builder.CreateExtractElement(VecBO, Ext0->getIndexOperand());
327 auto *Ext0 = cast<ExtractElementInst>(I0);
335 if (isExtractExtractCheap(Ext0, Ext1, I.getOpcode(), ExtractToChange,
340 unsigned CheapExtractIdx = ExtractToChange == Ext0 ? C1 : C0;
345 if (ExtractToChange == Ext0)
346 Ext0 = NewExtract;
352 foldExtExtCmp(Ext0, Ext1, I);
354 foldExtExtBinop(Ext0, Ext1, I);
555 auto *Ext0 = cast<ExtractElementInst>(I0);
557 ExtractElementInst *ConvertToShuf = getShuffleExtract(Ext0, Ext1);
570 int OldCost = TTI.getVectorInstrCost(Ext0->getOpcode(), VecTy, Index0);
578 int CheapIndex = ConvertToShuf == Ext0 ? Index1 : Index0;
579 int ExpensiveIndex = ConvertToShuf == Ext0 ? Index0 : Index1;
585 NewCost += TTI.getVectorInstrCost(Ext0->getOpcode(), CmpTy, CheapIndex);