Lines Matching refs:GEP
193 Value *InstCombinerImpl::EmitGEPOffset(GEPOperator *GEP, bool RewriteGEP) { in EmitGEPOffset() argument
195 return llvm::emitGEPOffset(&Builder, DL, GEP); in EmitGEPOffset()
198 auto *Inst = dyn_cast<Instruction>(GEP); in EmitGEPOffset()
202 Value *Offset = EmitGEPOffset(GEP); in EmitGEPOffset()
205 if (Inst && !GEP->hasOneUse() && !GEP->hasAllConstantIndices() && in EmitGEPOffset()
206 !GEP->getSourceElementType()->isIntegerTy(8)) { in EmitGEPOffset()
208 *Inst, Builder.CreateGEP(Builder.getInt8Ty(), GEP->getPointerOperand(), in EmitGEPOffset()
209 Offset, "", GEP->getNoWrapFlags())); in EmitGEPOffset()
2001 static bool shouldMergeGEPs(GEPOperator &GEP, GEPOperator &Src) { in shouldMergeGEPs() argument
2005 if (GEP.hasAllZeroIndices() && !Src.hasAllZeroIndices() && in shouldMergeGEPs()
2318 static Instruction *foldSelectGEP(GetElementPtrInst &GEP, in foldSelectGEP() argument
2320 if (!GEP.hasAllConstantIndices()) in foldSelectGEP()
2326 if (!match(GEP.getPointerOperand(), m_Instruction(Sel)) || in foldSelectGEP()
2334 SmallVector<Value *, 4> IndexC(GEP.indices()); in foldSelectGEP()
2335 GEPNoWrapFlags NW = GEP.getNoWrapFlags(); in foldSelectGEP()
2336 Type *Ty = GEP.getSourceElementType(); in foldSelectGEP()
2345 static Instruction *canonicalizeGEPOfConstGEPI8(GetElementPtrInst &GEP, in canonicalizeGEPOfConstGEPI8() argument
2348 if (GEP.getNumIndices() != 1) in canonicalizeGEPOfConstGEPI8()
2359 if (!match(GEP.getOperand(1), m_AddLike(m_Value(VarIndex), m_APInt(C2)))) in canonicalizeGEPOfConstGEPI8()
2364 Type *BaseType = GEP.getSourceElementType(); in canonicalizeGEPOfConstGEPI8()
2370 (Src->hasOneUse() && GEP.getOperand(1)->hasOneUse())) { in canonicalizeGEPOfConstGEPI8()
2379 Instruction *InstCombinerImpl::visitGEPOfGEP(GetElementPtrInst &GEP, in visitGEPOfGEP() argument
2384 if (!shouldMergeGEPs(*cast<GEPOperator>(&GEP), *Src)) in visitGEPOfGEP()
2387 if (auto *I = canonicalizeGEPOfConstGEPI8(GEP, Src, *this)) in visitGEPOfGEP()
2392 if (GEP.hasAllConstantIndices() && in visitGEPOfGEP()
2418 Constant::getNullValue(Type::getInt32Ty(GEP.getContext()))); in visitGEPOfGEP()
2424 if (!GEP.accumulateConstantOffset(DL, Offset)) in visitGEPOfGEP()
2436 GEP, Builder.CreateGEP( in visitGEPOfGEP()
2439 isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)))); in visitGEPOfGEP()
2443 bool IsInBounds = isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)); in visitGEPOfGEP()
2448 Indices.push_back(ConstantInt::get(GEP.getContext(), Idx)); in visitGEPOfGEP()
2457 GEP, Builder.CreateGEP(Src->getSourceElementType(), Src->getOperand(0), in visitGEPOfGEP()
2461 if (Src->getResultElementType() != GEP.getSourceElementType()) in visitGEPOfGEP()
2477 Value *GO1 = GEP.getOperand(1); in visitGEPOfGEP()
2487 simplifyAddInst(GO1, SO1, false, false, SQ.getWithInstruction(&GEP)); in visitGEPOfGEP()
2495 GEP.setIsInBounds(isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP))); in visitGEPOfGEP()
2496 replaceOperand(GEP, 0, Src->getOperand(0)); in visitGEPOfGEP()
2497 replaceOperand(GEP, 1, Sum); in visitGEPOfGEP()
2498 return &GEP; in visitGEPOfGEP()
2502 Indices.append(GEP.op_begin()+2, GEP.op_end()); in visitGEPOfGEP()
2503 } else if (isa<Constant>(*GEP.idx_begin()) && in visitGEPOfGEP()
2504 cast<Constant>(*GEP.idx_begin())->isNullValue() && in visitGEPOfGEP()
2508 Indices.append(GEP.idx_begin()+1, GEP.idx_end()); in visitGEPOfGEP()
2513 GEP, Builder.CreateGEP( in visitGEPOfGEP()
2515 isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)))); in visitGEPOfGEP()
2709 Instruction *InstCombinerImpl::visitGetElementPtrInst(GetElementPtrInst &GEP) { in visitGetElementPtrInst() argument
2710 Value *PtrOp = GEP.getOperand(0); in visitGetElementPtrInst()
2711 SmallVector<Value *, 8> Indices(GEP.indices()); in visitGetElementPtrInst()
2712 Type *GEPType = GEP.getType(); in visitGetElementPtrInst()
2713 Type *GEPEltType = GEP.getSourceElementType(); in visitGetElementPtrInst()
2715 simplifyGEPInst(GEPEltType, PtrOp, Indices, GEP.getNoWrapFlags(), in visitGetElementPtrInst()
2716 SQ.getWithInstruction(&GEP))) in visitGetElementPtrInst()
2717 return replaceInstUsesWith(GEP, V); in visitGetElementPtrInst()
2726 if (Value *V = SimplifyDemandedVectorElts(&GEP, AllOnesEltMask, in visitGetElementPtrInst()
2728 if (V != &GEP) in visitGetElementPtrInst()
2729 return replaceInstUsesWith(GEP, V); in visitGetElementPtrInst()
2730 return &GEP; in visitGetElementPtrInst()
2745 DL.getIndexType(GEP.getPointerOperandType()->getScalarType()); in visitGetElementPtrInst()
2747 gep_type_iterator GTI = gep_type_begin(GEP); in visitGetElementPtrInst()
2748 for (User::op_iterator I = GEP.op_begin() + 1, E = GEP.op_end(); I != E; in visitGetElementPtrInst()
2779 return &GEP; in visitGetElementPtrInst()
2782 if (!GEPEltType->isIntegerTy(8) && GEP.hasAllConstantIndices()) { in visitGetElementPtrInst()
2784 if (GEP.accumulateConstantOffset(DL, Offset)) in visitGetElementPtrInst()
2786 GEP, Builder.CreatePtrAdd(PtrOp, Builder.getInt(Offset), "", in visitGetElementPtrInst()
2787 GEP.getNoWrapFlags())); in visitGetElementPtrInst()
2796 (!GEPEltType->isIntegerTy(8) && GEP.getNumIndices() == 1 && in visitGetElementPtrInst()
2797 match(GEP.getOperand(1), in visitGetElementPtrInst()
2800 Value *Offset = EmitGEPOffset(cast<GEPOperator>(&GEP)); in visitGetElementPtrInst()
2802 GEP, Builder.CreatePtrAdd(PtrOp, Offset, "", GEP.getNoWrapFlags())); in visitGetElementPtrInst()
2817 if (Op1 == &GEP) in visitGetElementPtrInst()
2829 if (Op2 == &GEP) in visitGetElementPtrInst()
2906 NewGEP->insertBefore(*GEP.getParent(), GEP.getParent()->getFirstInsertionPt()); in visitGetElementPtrInst()
2907 return replaceOperand(GEP, 0, NewGEP); in visitGetElementPtrInst()
2911 if (Instruction *I = visitGEPOfGEP(GEP, Src)) in visitGetElementPtrInst()
2914 if (GEP.getNumIndices() == 1) { in visitGetElementPtrInst()
2915 unsigned AS = GEP.getPointerAddressSpace(); in visitGetElementPtrInst()
2916 if (GEP.getOperand(1)->getType()->getScalarSizeInBits() == in visitGetElementPtrInst()
2925 Value *X = GEP.getPointerOperand(); in visitGetElementPtrInst()
2927 if (match(GEP.getOperand(1), in visitGetElementPtrInst()
2933 GEP.replaceUsesWithIf(Y, [&](Use &U) { in visitGetElementPtrInst()
2940 return Changed ? &GEP : nullptr; in visitGetElementPtrInst()
2943 dyn_cast<PossiblyExactOperator>(GEP.getOperand(1))) { in visitGetElementPtrInst()
2948 match(GEP.getOperand(1), in visitGetElementPtrInst()
2951 match(GEP.getOperand(1), in visitGetElementPtrInst()
2954 GEP.getPointerOperand(), V, in visitGetElementPtrInst()
2955 GEP.getNoWrapFlags()); in visitGetElementPtrInst()
2990 GEP.getPointerOperand(), NewOp, in visitGetElementPtrInst()
2991 GEP.getNoWrapFlags()); in visitGetElementPtrInst()
3001 if (GEP.getNumIndices() == 1) { in visitGetElementPtrInst()
3005 SimplifyQuery Q = SQ.getWithInstruction(&GEP); in visitGetElementPtrInst()
3006 return GEP.isInBounds() && AddIsNSW && isKnownNonNegative(Idx1, Q) && in visitGetElementPtrInst()
3012 if (match(GEP.getOperand(1), in visitGetElementPtrInst()
3020 cast<OverflowingBinaryOperator>(GEP.getOperand(1))->hasNoSignedWrap(), in visitGetElementPtrInst()
3023 Builder.CreateGEP(GEP.getSourceElementType(), GEP.getPointerOperand(), in visitGetElementPtrInst()
3026 GEP, Builder.CreateGEP(GEP.getSourceElementType(), NewPtr, Idx2, "", in visitGetElementPtrInst()
3030 if (match(GEP.getOperand(1), m_OneUse(m_SExtLike(m_OneUse(m_NSWAdd( in visitGetElementPtrInst()
3041 GEP.getSourceElementType(), GEP.getPointerOperand(), in visitGetElementPtrInst()
3042 Builder.CreateSExt(Idx1, GEP.getOperand(1)->getType()), "", in visitGetElementPtrInst()
3045 GEP, in visitGetElementPtrInst()
3046 Builder.CreateGEP(GEP.getSourceElementType(), NewPtr, in visitGetElementPtrInst()
3047 Builder.CreateSExt(C, GEP.getOperand(1)->getType()), in visitGetElementPtrInst()
3052 if (!GEP.isInBounds()) { in visitGetElementPtrInst()
3063 if (GEP.accumulateConstantOffset(DL, BasePtrOffset) && in visitGetElementPtrInst()
3068 GEP.getSourceElementType(), PtrOp, Indices, GEP.getName()); in visitGetElementPtrInst()
3074 if (Instruction *R = foldSelectGEP(GEP, Builder)) in visitGetElementPtrInst()
4045 Value *GEP = Builder.CreateInBoundsGEP(L->getType(), in visitExtractValueInst() local
4047 Instruction *NL = Builder.CreateLoad(EV.getType(), GEP); in visitExtractValueInst()