Lines Matching refs:GEP
90 Value *InstCombiner::EmitGEPOffset(User *GEP) { in EmitGEPOffset() argument
91 return llvm::EmitGEPOffset(Builder, *getTargetData(), GEP); in EmitGEPOffset()
798 static bool shouldMergeGEPs(GEPOperator &GEP, GEPOperator &Src) { in shouldMergeGEPs() argument
802 if (GEP.hasAllZeroIndices() && !Src.hasAllZeroIndices() && in shouldMergeGEPs()
808 Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) { in visitGetElementPtrInst() argument
809 SmallVector<Value*, 8> Ops(GEP.op_begin(), GEP.op_end()); in visitGetElementPtrInst()
812 return ReplaceInstUsesWith(GEP, V); in visitGetElementPtrInst()
814 Value *PtrOp = GEP.getOperand(0); in visitGetElementPtrInst()
820 Type *IntPtrTy = TD->getIntPtrType(GEP.getContext()); in visitGetElementPtrInst()
822 gep_type_iterator GTI = gep_type_begin(GEP); in visitGetElementPtrInst()
823 for (User::op_iterator I = GEP.op_begin() + 1, E = GEP.op_end(); in visitGetElementPtrInst()
847 if (MadeChange) return &GEP; in visitGetElementPtrInst()
855 if (!shouldMergeGEPs(*cast<GEPOperator>(&GEP), *Src)) in visitGetElementPtrInst()
881 Value *GO1 = GEP.getOperand(1); in visitGetElementPtrInst()
898 GEP.setOperand(0, Src->getOperand(0)); in visitGetElementPtrInst()
899 GEP.setOperand(1, Sum); in visitGetElementPtrInst()
900 return &GEP; in visitGetElementPtrInst()
904 Indices.append(GEP.op_begin()+2, GEP.op_end()); in visitGetElementPtrInst()
905 } else if (isa<Constant>(*GEP.idx_begin()) && in visitGetElementPtrInst()
906 cast<Constant>(*GEP.idx_begin())->isNullValue() && in visitGetElementPtrInst()
910 Indices.append(GEP.idx_begin()+1, GEP.idx_end()); in visitGetElementPtrInst()
914 return (GEP.isInBounds() && Src->isInBounds()) ? in visitGetElementPtrInst()
916 GEP.getName()) : in visitGetElementPtrInst()
917 GetElementPtrInst::Create(Src->getOperand(0), Indices, GEP.getName()); in visitGetElementPtrInst()
929 StrippedPtrTy->getAddressSpace() == GEP.getPointerAddressSpace()) { in visitGetElementPtrInst()
932 if (ConstantInt *C = dyn_cast<ConstantInt>(GEP.getOperand(1))) in visitGetElementPtrInst()
949 SmallVector<Value*, 8> Idx(GEP.idx_begin()+1, GEP.idx_end()); in visitGetElementPtrInst()
951 GetElementPtrInst::Create(StrippedPtr, Idx, GEP.getName()); in visitGetElementPtrInst()
952 Res->setIsInBounds(GEP.isInBounds()); in visitGetElementPtrInst()
965 GEP.setOperand(0, StrippedPtr); in visitGetElementPtrInst()
966 return &GEP; in visitGetElementPtrInst()
970 } else if (GEP.getNumOperands() == 2) { in visitGetElementPtrInst()
980 Idx[0] = Constant::getNullValue(Type::getInt32Ty(GEP.getContext())); in visitGetElementPtrInst()
981 Idx[1] = GEP.getOperand(1); in visitGetElementPtrInst()
982 Value *NewGEP = GEP.isInBounds() ? in visitGetElementPtrInst()
983 Builder->CreateInBoundsGEP(StrippedPtr, Idx, GEP.getName()) : in visitGetElementPtrInst()
984 Builder->CreateGEP(StrippedPtr, Idx, GEP.getName()); in visitGetElementPtrInst()
986 return new BitCastInst(NewGEP, GEP.getType()); in visitGetElementPtrInst()
1003 NewIdx = GEP.getOperand(1); in visitGetElementPtrInst()
1005 } else if (ConstantInt *CI = dyn_cast<ConstantInt>(GEP.getOperand(1))) { in visitGetElementPtrInst()
1008 } else if (Instruction *Inst =dyn_cast<Instruction>(GEP.getOperand(1))){ in visitGetElementPtrInst()
1039 Idx[0] = Constant::getNullValue(Type::getInt32Ty(GEP.getContext())); in visitGetElementPtrInst()
1041 Value *NewGEP = GEP.isInBounds() ? in visitGetElementPtrInst()
1042 Builder->CreateInBoundsGEP(StrippedPtr, Idx, GEP.getName()): in visitGetElementPtrInst()
1043 Builder->CreateGEP(StrippedPtr, Idx, GEP.getName()); in visitGetElementPtrInst()
1045 return new BitCastInst(NewGEP, GEP.getType()); in visitGetElementPtrInst()
1058 !isa<BitCastInst>(BCI->getOperand(0)) && GEP.hasAllConstantIndices() && in visitGetElementPtrInst()
1059 StrippedPtrTy->getAddressSpace() == GEP.getPointerAddressSpace()) { in visitGetElementPtrInst()
1062 SmallVector<Value*, 8> Ops(GEP.idx_begin(), GEP.idx_end()); in visitGetElementPtrInst()
1063 int64_t Offset = TD->getIndexedOffset(GEP.getPointerOperandType(), Ops); in visitGetElementPtrInst()
1079 return &GEP; in visitGetElementPtrInst()
1082 return new BitCastInst(BCI->getOperand(0), GEP.getType()); in visitGetElementPtrInst()
1092 Value *NGEP = GEP.isInBounds() ? in visitGetElementPtrInst()
1096 if (NGEP->getType() == GEP.getType()) in visitGetElementPtrInst()
1097 return ReplaceInstUsesWith(GEP, NGEP); in visitGetElementPtrInst()
1098 NGEP->takeName(&GEP); in visitGetElementPtrInst()
1099 return new BitCastInst(NGEP, GEP.getType()); in visitGetElementPtrInst()
1454 Value *GEP = Builder->CreateInBoundsGEP(L->getPointerOperand(), Indices); in visitExtractValueInst() local
1457 return ReplaceInstUsesWith(EV, Builder->CreateLoad(GEP)); in visitExtractValueInst()