Lines Matching refs:GEP

204 Value *InstCombinerImpl::EmitGEPOffset(User *GEP) {  in EmitGEPOffset()  argument
205 return llvm::EmitGEPOffset(&Builder, DL, GEP); in EmitGEPOffset()
1412 static bool shouldMergeGEPs(GEPOperator &GEP, GEPOperator &Src) { in shouldMergeGEPs() argument
1416 if (GEP.hasAllZeroIndices() && !Src.hasAllZeroIndices() && in shouldMergeGEPs()
1947 static Instruction *foldSelectGEP(GetElementPtrInst &GEP, in foldSelectGEP() argument
1949 if (!GEP.hasAllConstantIndices()) in foldSelectGEP()
1955 if (!match(GEP.getPointerOperand(), m_Instruction(Sel)) || in foldSelectGEP()
1963 SmallVector<Value *, 4> IndexC(GEP.indices()); in foldSelectGEP()
1964 bool IsInBounds = GEP.isInBounds(); in foldSelectGEP()
1965 Type *Ty = GEP.getSourceElementType(); in foldSelectGEP()
1971 Instruction *InstCombinerImpl::visitGEPOfGEP(GetElementPtrInst &GEP, in visitGEPOfGEP() argument
1976 if (!shouldMergeGEPs(*cast<GEPOperator>(&GEP), *Src)) in visitGEPOfGEP()
1979 if (Src->getResultElementType() == GEP.getSourceElementType() && in visitGEPOfGEP()
1980 Src->getNumOperands() == 2 && GEP.getNumOperands() == 2 && in visitGEPOfGEP()
1982 Value *GO1 = GEP.getOperand(1); in visitGEPOfGEP()
1987 if (Loop *L = LI->getLoopFor(GEP.getParent())) { in visitGEPOfGEP()
1995 bool IsInBounds = Src->isInBounds() && GEP.isInBounds() && in visitGEPOfGEP()
1996 isKnownNonNegative(SO1, DL, 0, &AC, &GEP, &DT) && in visitGEPOfGEP()
1997 isKnownNonNegative(GO1, DL, 0, &AC, &GEP, &DT); in visitGEPOfGEP()
2000 Value *NewSrc = Builder.CreateGEP(GEP.getSourceElementType(), in visitGEPOfGEP()
2004 GEP.getSourceElementType(), NewSrc, {SO1}); in visitGEPOfGEP()
2022 if (PtrTy->isOpaquePointerTy() && GEP.hasAllConstantIndices() && in visitGEPOfGEP()
2048 Constant::getNullValue(Type::getInt32Ty(GEP.getContext()))); in visitGEPOfGEP()
2054 if (!GEP.accumulateConstantOffset(DL, Offset)) in visitGEPOfGEP()
2065 return isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)) in visitGEPOfGEP()
2068 Builder.getInt(OffsetOld), GEP.getName()) in visitGEPOfGEP()
2071 Builder.getInt(OffsetOld), GEP.getName()); in visitGEPOfGEP()
2075 bool IsInBounds = isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)); in visitGEPOfGEP()
2080 Indices.push_back(ConstantInt::get(GEP.getContext(), Idx)); in visitGEPOfGEP()
2091 GEP.getName()) in visitGEPOfGEP()
2094 GEP.getName()); in visitGEPOfGEP()
2097 if (Src->getResultElementType() != GEP.getSourceElementType()) in visitGEPOfGEP()
2113 Value *GO1 = GEP.getOperand(1); in visitGEPOfGEP()
2123 simplifyAddInst(GO1, SO1, false, false, SQ.getWithInstruction(&GEP)); in visitGEPOfGEP()
2131 GEP.setIsInBounds(isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP))); in visitGEPOfGEP()
2132 replaceOperand(GEP, 0, Src->getOperand(0)); in visitGEPOfGEP()
2133 replaceOperand(GEP, 1, Sum); in visitGEPOfGEP()
2134 return &GEP; in visitGEPOfGEP()
2138 Indices.append(GEP.op_begin()+2, GEP.op_end()); in visitGEPOfGEP()
2139 } else if (isa<Constant>(*GEP.idx_begin()) && in visitGEPOfGEP()
2140 cast<Constant>(*GEP.idx_begin())->isNullValue() && in visitGEPOfGEP()
2144 Indices.append(GEP.idx_begin()+1, GEP.idx_end()); in visitGEPOfGEP()
2148 return isMergedGEPInBounds(*Src, *cast<GEPOperator>(&GEP)) in visitGEPOfGEP()
2151 GEP.getName()) in visitGEPOfGEP()
2154 GEP.getName()); in visitGEPOfGEP()
2161 GetElementPtrInst &GEP) { in visitGEPOfBitcast() argument
2168 Type *GEPEltType = GEP.getSourceElementType(); in visitGEPOfBitcast()
2183 if (GEP.getNumOperands() == 3 && in visitGEPOfBitcast()
2193 SmallVector<Value *, 8> Indices(GEP.indices()); in visitGEPOfBitcast()
2195 Builder.CreateGEP(SrcEltType, SrcOp, Indices, "", GEP.isInBounds()); in visitGEPOfBitcast()
2196 NGEP->takeName(&GEP); in visitGEPOfBitcast()
2199 if (NGEP->getType()->getPointerAddressSpace() != GEP.getAddressSpace()) in visitGEPOfBitcast()
2200 return new AddrSpaceCastInst(NGEP, GEP.getType()); in visitGEPOfBitcast()
2202 return replaceInstUsesWith(GEP, NGEP); in visitGEPOfBitcast()
2210 unsigned OffsetBits = DL.getIndexTypeSizeInBits(GEP.getType()); in visitGEPOfBitcast()
2219 if (!isa<BitCastInst>(SrcOp) && GEP.accumulateConstantOffset(DL, Offset) && in visitGEPOfBitcast()
2234 return &GEP; in visitGEPOfBitcast()
2238 if (SrcType->getPointerAddressSpace() != GEP.getAddressSpace()) in visitGEPOfBitcast()
2239 return new AddrSpaceCastInst(SrcOp, GEP.getType()); in visitGEPOfBitcast()
2240 return new BitCastInst(SrcOp, GEP.getType()); in visitGEPOfBitcast()
2249 GEP.isInBounds()); in visitGEPOfBitcast()
2251 if (NGEP->getType() == GEP.getType()) in visitGEPOfBitcast()
2252 return replaceInstUsesWith(GEP, NGEP); in visitGEPOfBitcast()
2253 NGEP->takeName(&GEP); in visitGEPOfBitcast()
2255 if (NGEP->getType()->getPointerAddressSpace() != GEP.getAddressSpace()) in visitGEPOfBitcast()
2256 return new AddrSpaceCastInst(NGEP, GEP.getType()); in visitGEPOfBitcast()
2257 return new BitCastInst(NGEP, GEP.getType()); in visitGEPOfBitcast()
2264 Instruction *InstCombinerImpl::visitGetElementPtrInst(GetElementPtrInst &GEP) { in visitGetElementPtrInst() argument
2265 Value *PtrOp = GEP.getOperand(0); in visitGetElementPtrInst()
2266 SmallVector<Value *, 8> Indices(GEP.indices()); in visitGetElementPtrInst()
2267 Type *GEPType = GEP.getType(); in visitGetElementPtrInst()
2268 Type *GEPEltType = GEP.getSourceElementType(); in visitGetElementPtrInst()
2270 if (Value *V = simplifyGEPInst(GEPEltType, PtrOp, Indices, GEP.isInBounds(), in visitGetElementPtrInst()
2271 SQ.getWithInstruction(&GEP))) in visitGetElementPtrInst()
2272 return replaceInstUsesWith(GEP, V); in visitGetElementPtrInst()
2281 if (Value *V = SimplifyDemandedVectorElts(&GEP, AllOnesEltMask, in visitGetElementPtrInst()
2283 if (V != &GEP) in visitGetElementPtrInst()
2284 return replaceInstUsesWith(GEP, V); in visitGetElementPtrInst()
2285 return &GEP; in visitGetElementPtrInst()
2300 DL.getIndexType(GEP.getPointerOperandType()->getScalarType()); in visitGetElementPtrInst()
2302 gep_type_iterator GTI = gep_type_begin(GEP); in visitGetElementPtrInst()
2303 for (User::op_iterator I = GEP.op_begin() + 1, E = GEP.op_end(); I != E; in visitGetElementPtrInst()
2334 return &GEP; in visitGetElementPtrInst()
2348 if (Op1 == &GEP) in visitGetElementPtrInst()
2360 if (Op2 == &GEP) in visitGetElementPtrInst()
2437 GEP.getParent()->getInstList().insert( in visitGetElementPtrInst()
2438 GEP.getParent()->getFirstInsertionPt(), NewGEP); in visitGetElementPtrInst()
2439 replaceOperand(GEP, 0, NewGEP); in visitGetElementPtrInst()
2444 if (Instruction *I = visitGEPOfGEP(GEP, Src)) in visitGetElementPtrInst()
2449 if (GEP.getNumIndices() == 1 && !IsGEPSrcEleScalable) { in visitGetElementPtrInst()
2450 unsigned AS = GEP.getPointerAddressSpace(); in visitGetElementPtrInst()
2451 if (GEP.getOperand(1)->getType()->getScalarSizeInBits() == in visitGetElementPtrInst()
2459 V = GEP.getOperand(1); in visitGetElementPtrInst()
2461 } else if (match(GEP.getOperand(1), in visitGetElementPtrInst()
2465 } else if (match(GEP.getOperand(1), in visitGetElementPtrInst()
2475 Value *X = GEP.getOperand(0); in visitGetElementPtrInst()
2499 if (auto *C = dyn_cast<ConstantInt>(GEP.getOperand(1))) in visitGetElementPtrInst()
2514 SmallVector<Value *, 8> Idx(drop_begin(GEP.indices())); in visitGetElementPtrInst()
2516 StrippedPtrEltTy, StrippedPtr, Idx, GEP.getName()); in visitGetElementPtrInst()
2517 Res->setIsInBounds(GEP.isInBounds()); in visitGetElementPtrInst()
2518 if (StrippedPtrTy->getAddressSpace() == GEP.getAddressSpace()) in visitGetElementPtrInst()
2537 if (StrippedPtrTy->getAddressSpace() == GEP.getAddressSpace()) { in visitGetElementPtrInst()
2538 GEP.setSourceElementType(XATy); in visitGetElementPtrInst()
2539 return replaceOperand(GEP, 0, StrippedPtr); in visitGetElementPtrInst()
2550 SmallVector<Value *, 8> Idx(GEP.indices()); in visitGetElementPtrInst()
2553 GEP.getName(), GEP.isInBounds()); in visitGetElementPtrInst()
2558 } else if (GEP.getNumOperands() == 2 && !IsGEPSrcEleScalable) { in visitGetElementPtrInst()
2568 Value *Idx[2] = {Constant::getNullValue(IdxType), GEP.getOperand(1)}; in visitGetElementPtrInst()
2570 GEP.getName(), GEP.isInBounds()); in visitGetElementPtrInst()
2586 Value *Idx = GEP.getOperand(1); in visitGetElementPtrInst()
2603 GEP.getName(), GEP.isInBounds() && NSW); in visitGetElementPtrInst()
2625 Value *Idx = GEP.getOperand(1); in visitGetElementPtrInst()
2645 GEP.getName(), GEP.isInBounds() && NSW); in visitGetElementPtrInst()
2669 if (Instruction *I = visitGEPOfBitcast(BCI, GEP)) in visitGetElementPtrInst()
2672 if (!GEP.isInBounds()) { in visitGetElementPtrInst()
2680 if (GEP.accumulateConstantOffset(DL, BasePtrOffset) && in visitGetElementPtrInst()
2687 GEP.getSourceElementType(), PtrOp, Indices, GEP.getName()); in visitGetElementPtrInst()
2693 if (Instruction *R = foldSelectGEP(GEP, Builder)) in visitGetElementPtrInst()
3379 Value *GEP = Builder.CreateInBoundsGEP(L->getType(), in visitExtractValueInst() local
3381 Instruction *NL = Builder.CreateLoad(EV.getType(), GEP); in visitExtractValueInst()