Lines Matching refs:GEP

193 Value *InstCombinerImpl::EmitGEPOffset(User *GEP) {  in EmitGEPOffset()  argument
194 return llvm::emitGEPOffset(&Builder, DL, GEP); in EmitGEPOffset()
1794 static bool shouldMergeGEPs(GEPOperator &GEP, GEPOperator &Src) { in shouldMergeGEPs() argument
1798 if (GEP.hasAllZeroIndices() && !Src.hasAllZeroIndices() && in shouldMergeGEPs()
2116 static Instruction *foldSelectGEP(GetElementPtrInst &GEP, in foldSelectGEP() argument
2118 if (!GEP.hasAllConstantIndices()) in foldSelectGEP()
2124 if (!match(GEP.getPointerOperand(), m_Instruction(Sel)) || in foldSelectGEP()
2132 SmallVector<Value *, 4> IndexC(GEP.indices()); in foldSelectGEP()
2133 bool IsInBounds = GEP.isInBounds(); in foldSelectGEP()
2134 Type *Ty = GEP.getSourceElementType(); in foldSelectGEP()
2140 Instruction *InstCombinerImpl::visitGEPOfGEP(GetElementPtrInst &GEP, in visitGEPOfGEP() argument
2145 if (!shouldMergeGEPs(*cast<GEPOperator>(&GEP), *Src)) in visitGEPOfGEP()
2150 if (GEP.hasAllConstantIndices() && in visitGEPOfGEP()
2176 Constant::getNullValue(Type::getInt32Ty(GEP.getContext()))); in visitGEPOfGEP()
2182 if (!GEP.accumulateConstantOffset(DL, Offset)) in visitGEPOfGEP()
2194 GEP, Builder.CreateGEP( in visitGEPOfGEP()
2197 isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)))); in visitGEPOfGEP()
2201 bool IsInBounds = isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)); in visitGEPOfGEP()
2206 Indices.push_back(ConstantInt::get(GEP.getContext(), Idx)); in visitGEPOfGEP()
2215 GEP, Builder.CreateGEP(Src->getSourceElementType(), Src->getOperand(0), in visitGEPOfGEP()
2219 if (Src->getResultElementType() != GEP.getSourceElementType()) in visitGEPOfGEP()
2235 Value *GO1 = GEP.getOperand(1); in visitGEPOfGEP()
2245 simplifyAddInst(GO1, SO1, false, false, SQ.getWithInstruction(&GEP)); in visitGEPOfGEP()
2253 GEP.setIsInBounds(isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP))); in visitGEPOfGEP()
2254 replaceOperand(GEP, 0, Src->getOperand(0)); in visitGEPOfGEP()
2255 replaceOperand(GEP, 1, Sum); in visitGEPOfGEP()
2256 return &GEP; in visitGEPOfGEP()
2260 Indices.append(GEP.op_begin()+2, GEP.op_end()); in visitGEPOfGEP()
2261 } else if (isa<Constant>(*GEP.idx_begin()) && in visitGEPOfGEP()
2262 cast<Constant>(*GEP.idx_begin())->isNullValue() && in visitGEPOfGEP()
2266 Indices.append(GEP.idx_begin()+1, GEP.idx_end()); in visitGEPOfGEP()
2271 GEP, Builder.CreateGEP( in visitGEPOfGEP()
2273 isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)))); in visitGEPOfGEP()
2382 Instruction *InstCombinerImpl::visitGetElementPtrInst(GetElementPtrInst &GEP) { in visitGetElementPtrInst() argument
2383 Value *PtrOp = GEP.getOperand(0); in visitGetElementPtrInst()
2384 SmallVector<Value *, 8> Indices(GEP.indices()); in visitGetElementPtrInst()
2385 Type *GEPType = GEP.getType(); in visitGetElementPtrInst()
2386 Type *GEPEltType = GEP.getSourceElementType(); in visitGetElementPtrInst()
2388 if (Value *V = simplifyGEPInst(GEPEltType, PtrOp, Indices, GEP.isInBounds(), in visitGetElementPtrInst()
2389 SQ.getWithInstruction(&GEP))) in visitGetElementPtrInst()
2390 return replaceInstUsesWith(GEP, V); in visitGetElementPtrInst()
2399 if (Value *V = SimplifyDemandedVectorElts(&GEP, AllOnesEltMask, in visitGetElementPtrInst()
2401 if (V != &GEP) in visitGetElementPtrInst()
2402 return replaceInstUsesWith(GEP, V); in visitGetElementPtrInst()
2403 return &GEP; in visitGetElementPtrInst()
2418 DL.getIndexType(GEP.getPointerOperandType()->getScalarType()); in visitGetElementPtrInst()
2420 gep_type_iterator GTI = gep_type_begin(GEP); in visitGetElementPtrInst()
2421 for (User::op_iterator I = GEP.op_begin() + 1, E = GEP.op_end(); I != E; in visitGetElementPtrInst()
2452 return &GEP; in visitGetElementPtrInst()
2466 if (Op1 == &GEP) in visitGetElementPtrInst()
2478 if (Op2 == &GEP) in visitGetElementPtrInst()
2555 NewGEP->insertBefore(*GEP.getParent(), GEP.getParent()->getFirstInsertionPt()); in visitGetElementPtrInst()
2556 return replaceOperand(GEP, 0, NewGEP); in visitGetElementPtrInst()
2560 if (Instruction *I = visitGEPOfGEP(GEP, Src)) in visitGetElementPtrInst()
2565 if (GEP.getNumIndices() == 1 && !IsGEPSrcEleScalable) { in visitGetElementPtrInst()
2566 unsigned AS = GEP.getPointerAddressSpace(); in visitGetElementPtrInst()
2567 if (GEP.getOperand(1)->getType()->getScalarSizeInBits() == in visitGetElementPtrInst()
2576 Value *X = GEP.getPointerOperand(); in visitGetElementPtrInst()
2578 if (match(GEP.getOperand(1), in visitGetElementPtrInst()
2584 GEP.replaceUsesWithIf(Y, [&](Use &U) { in visitGetElementPtrInst()
2591 return Changed ? &GEP : nullptr; in visitGetElementPtrInst()
2597 match(GEP.getOperand(1), in visitGetElementPtrInst()
2600 match(GEP.getOperand(1), in visitGetElementPtrInst()
2603 Builder.getInt8Ty(), GEP.getPointerOperand(), V); in visitGetElementPtrInst()
2604 NewGEP->setIsInBounds(GEP.isInBounds()); in visitGetElementPtrInst()
2614 if (GEP.getNumIndices() == 1) { in visitGetElementPtrInst()
2617 if (match(GEP.getOperand(1), in visitGetElementPtrInst()
2624 auto *NewPtr = Builder.CreateGEP(GEP.getResultElementType(), in visitGetElementPtrInst()
2625 GEP.getPointerOperand(), Idx1); in visitGetElementPtrInst()
2626 return GetElementPtrInst::Create(GEP.getResultElementType(), NewPtr, in visitGetElementPtrInst()
2630 if (match(GEP.getOperand(1), m_OneUse(m_SExtLike(m_OneUse(m_NSWAdd( in visitGetElementPtrInst()
2639 GEP.getResultElementType(), GEP.getPointerOperand(), in visitGetElementPtrInst()
2640 Builder.CreateSExt(Idx1, GEP.getOperand(1)->getType())); in visitGetElementPtrInst()
2642 GEP.getResultElementType(), NewPtr, in visitGetElementPtrInst()
2643 Builder.CreateSExt(C, GEP.getOperand(1)->getType())); in visitGetElementPtrInst()
2647 if (!GEP.isInBounds()) { in visitGetElementPtrInst()
2658 if (GEP.accumulateConstantOffset(DL, BasePtrOffset) && in visitGetElementPtrInst()
2663 GEP.getSourceElementType(), PtrOp, Indices, GEP.getName()); in visitGetElementPtrInst()
2669 if (Instruction *R = foldSelectGEP(GEP, Builder)) in visitGetElementPtrInst()
3564 Value *GEP = Builder.CreateInBoundsGEP(L->getType(), in visitExtractValueInst() local
3566 Instruction *NL = Builder.CreateLoad(EV.getType(), GEP); in visitExtractValueInst()