Lines Matching defs:IC
186 static Instruction *simplifyAllocaArraySize(InstCombinerImpl &IC,
195 return IC.replaceOperand(AI, 0, IC.Builder.getInt32(1));
202 AllocaInst *New = IC.Builder.CreateAlloca(NewTy, AI.getAddressSpace(),
208 return IC.replaceInstUsesWith(AI, New);
213 return IC.replaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
218 Type *PtrIdxTy = IC.getDataLayout().getIndexType(AI.getType());
220 Value *V = IC.Builder.CreateIntCast(AI.getArraySize(), PtrIdxTy, false);
221 return IC.replaceOperand(AI, 0, V);
240 PointerReplacer(InstCombinerImpl &IC, Instruction &Root, unsigned SrcAS)
241 : IC(IC), Root(Root), FromAS(SrcAS) {}
260 return (FromAS == ToAS) || IC.isValidAddrSpaceCast(FromAS, ToAS);
266 InstCombinerImpl ⁣
361 IC.InsertNewInstWith(NewI, LT->getIterator());
362 IC.replaceInstUsesWith(*LT, NewI);
378 IC.InsertNewInstWith(NewI, GEP->getIterator());
391 IC.InsertNewInstWith(NewSI, SI->getIterator());
403 IC.Builder.SetInsertPoint(MemCpy);
404 auto *NewI = IC.Builder.CreateMemTransferInst(
411 IC.eraseInstFromFunction(*MemCpy);
424 IC.InsertNewInstWith(NewI, ASC->getIterator());
564 static StoreInst *combineStoreToNewValue(InstCombinerImpl &IC, StoreInst &SI,
574 IC.Builder.CreateAlignedStore(V, Ptr, SI.getAlign(), SI.isVolatile());
634 static Instruction *combineLoadToOperationType(InstCombinerImpl &IC,
663 if (CastUser->isNoopCast(IC.getDataLayout()) &&
666 LoadInst *NewLoad = IC.combineLoadToNewType(Load, DestTy);
668 IC.eraseInstFromFunction(*CastUser);
679 static Instruction *unpackLoadToAggregate(InstCombinerImpl &IC, LoadInst &LI) {
695 LoadInst *NewLoad = IC.combineLoadToNewType(LI, ST->getTypeAtIndex(0U),
698 return IC.replaceInstUsesWith(LI, IC.Builder.CreateInsertValue(
704 const DataLayout &DL = IC.getDataLayout();
716 auto *Ptr = IC.Builder.CreateInBoundsPtrAdd(
717 Addr, IC.Builder.CreateTypeSize(IdxType, SL->getElementOffset(i)),
719 auto *L = IC.Builder.CreateAlignedLoad(
725 V = IC.Builder.CreateInsertValue(V, L, i);
729 return IC.replaceInstUsesWith(LI, V);
736 LoadInst *NewLoad = IC.combineLoadToNewType(LI, ET, ".unpack");
738 return IC.replaceInstUsesWith(LI, IC.Builder.CreateInsertValue(
746 if (NumElements > IC.MaxArraySizeForCombine)
749 const DataLayout &DL = IC.getDataLayout();
764 auto *Ptr = IC.Builder.CreateInBoundsGEP(AT, Addr, ArrayRef(Indices),
767 auto *L = IC.Builder.CreateAlignedLoad(AT->getElementType(), Ptr,
770 V = IC.Builder.CreateInsertValue(V, L, i);
775 return IC.replaceInstUsesWith(LI, V);
869 static bool canReplaceGEPIdxWithZero(InstCombinerImpl &IC,
909 const DataLayout &DL = IC.getDataLayout();
918 KnownBits Known = IC.computeKnownBits(GEPI->getOperand(i), 0, MemI);
944 static Instruction *replaceGEPIdxWithZero(InstCombinerImpl &IC, Value *Ptr,
948 if (canReplaceGEPIdxWithZero(IC, GEPI, &MemI, Idx)) {
952 IC.InsertNewInstBefore(NewGEPI, GEPI->getIterator());
1093 static Value *likeBitCastFromVector(InstCombinerImpl &IC, Value *V) {
1115 const auto &DL = IC.getDataLayout();
1153 /// combined or not: IC.EraseInstFromFunction returns a null pointer.
1154 static bool combineStoreToValueType(InstCombinerImpl &IC, StoreInst &SI) {
1176 combineStoreToNewValue(IC, SI, V);
1181 if (Value *U = likeBitCastFromVector(IC, V))
1183 combineStoreToNewValue(IC, SI, U);
1192 static bool unpackStoreToAggregate(InstCombinerImpl &IC, StoreInst &SI) {
1208 V = IC.Builder.CreateExtractValue(V, 0);
1209 combineStoreToNewValue(IC, SI, V);
1215 const DataLayout &DL = IC.getDataLayout();
1231 auto *Ptr = IC.Builder.CreateInBoundsPtrAdd(
1232 Addr, IC.Builder.CreateTypeSize(IdxType, SL->getElementOffset(i)),
1234 auto *Val = IC.Builder.CreateExtractValue(V, i, EltName);
1237 llvm::Instruction *NS = IC.Builder.CreateAlignedStore(Val, Ptr, EltAlign);
1248 V = IC.Builder.CreateExtractValue(V, 0);
1249 combineStoreToNewValue(IC, SI, V);
1257 if (NumElements > IC.MaxArraySizeForCombine)
1260 const DataLayout &DL = IC.getDataLayout();
1280 IC.Builder.CreateInBoundsGEP(AT, Addr, ArrayRef(Indices), AddrName);
1281 auto *Val = IC.Builder.CreateExtractValue(V, i, EltName);
1283 Instruction *NS = IC.Builder.CreateAlignedStore(Val, Ptr, EltAlign);