Lines Matching refs:GEP

237   static Value *Extract(Value *Idx, GetElementPtrInst *GEP,
243 static int64_t Find(Value *Idx, GetElementPtrInst *GEP,
394 bool splitGEP(GetElementPtrInst *GEP);
421 int64_t accumulateByteOffset(GetElementPtrInst *GEP, bool &NeedsExtraction);
438 bool canonicalizeArrayIndicesToIndexSize(GetElementPtrInst *GEP);
780 Value *ConstantOffsetExtractor::Extract(Value *Idx, GetElementPtrInst *GEP, in Extract() argument
783 ConstantOffsetExtractor Extractor(GEP, DT); in Extract()
787 GEP->isInBounds()); in Extract()
798 int64_t ConstantOffsetExtractor::Find(Value *Idx, GetElementPtrInst *GEP, in Find() argument
801 return ConstantOffsetExtractor(GEP, DT) in Find()
803 GEP->isInBounds()) in Find()
808 GetElementPtrInst *GEP) { in canonicalizeArrayIndicesToIndexSize() argument
810 Type *PtrIdxTy = DL->getIndexType(GEP->getType()); in canonicalizeArrayIndicesToIndexSize()
811 gep_type_iterator GTI = gep_type_begin(*GEP); in canonicalizeArrayIndicesToIndexSize()
812 for (User::op_iterator I = GEP->op_begin() + 1, E = GEP->op_end(); in canonicalizeArrayIndicesToIndexSize()
817 *I = CastInst::CreateIntegerCast(*I, PtrIdxTy, true, "idxprom", GEP); in canonicalizeArrayIndicesToIndexSize()
826 SeparateConstOffsetFromGEP::accumulateByteOffset(GetElementPtrInst *GEP, in accumulateByteOffset() argument
830 gep_type_iterator GTI = gep_type_begin(*GEP); in accumulateByteOffset()
831 for (unsigned I = 1, E = GEP->getNumOperands(); I != E; ++I, ++GTI) { in accumulateByteOffset()
839 ConstantOffsetExtractor::Find(GEP->getOperand(I), GEP, DT); in accumulateByteOffset()
850 uint64_t Field = cast<ConstantInt>(GEP->getOperand(I))->getZExtValue(); in accumulateByteOffset()
973 bool SeparateConstOffsetFromGEP::splitGEP(GetElementPtrInst *GEP) { in splitGEP() argument
975 if (GEP->getType()->isVectorTy()) in splitGEP()
980 if (GEP->hasAllConstantIndices()) in splitGEP()
983 bool Changed = canonicalizeArrayIndicesToIndexSize(GEP); in splitGEP()
986 int64_t AccumulativeByteOffset = accumulateByteOffset(GEP, NeedsExtraction); in splitGEP()
991 TargetTransformInfo &TTI = GetTTI(*GEP->getFunction()); in splitGEP()
1001 unsigned AddrSpace = GEP->getPointerAddressSpace(); in splitGEP()
1002 if (!TTI.isLegalAddressingMode(GEP->getResultElementType(), in splitGEP()
1017 gep_type_iterator GTI = gep_type_begin(*GEP); in splitGEP()
1018 for (unsigned I = 1, E = GEP->getNumOperands(); I != E; ++I, ++GTI) { in splitGEP()
1026 Value *OldIdx = GEP->getOperand(I); in splitGEP()
1029 ConstantOffsetExtractor::Extract(OldIdx, GEP, UserChainTail, DT); in splitGEP()
1032 GEP->setOperand(I, NewIdx); in splitGEP()
1060 bool GEPWasInBounds = GEP->isInBounds(); in splitGEP()
1061 GEP->setIsInBounds(false); in splitGEP()
1071 unsigned AddrSpace = GEP->getPointerAddressSpace(); in splitGEP()
1076 lowerToSingleIndexGEPs(GEP, AccumulativeByteOffset); in splitGEP()
1078 lowerToArithmetics(GEP, AccumulativeByteOffset); in splitGEP()
1103 Instruction *NewGEP = GEP->clone(); in splitGEP()
1104 NewGEP->insertBefore(GEP); in splitGEP()
1106 Type *PtrIdxTy = DL->getIndexType(GEP->getType()); in splitGEP()
1107 IRBuilder<> Builder(GEP); in splitGEP()
1110 GEP->getName(), GEPWasInBounds)); in splitGEP()
1111 NewGEP->copyMetadata(*GEP); in splitGEP()
1113 GEP->replaceAllUsesWith(NewGEP); in splitGEP()
1114 GEP->eraseFromParent(); in splitGEP()
1143 if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(&I)) in run() local
1144 Changed |= splitGEP(GEP); in run()