Lines Matching full:memcpy
51 "Atomic memcpy lowering is not supported for vector operand type"); in createMemCpyLoopKnownSize()
55 "Atomic memcpy lowering is not supported for selected operand size"); in createMemCpyLoopKnownSize()
61 PostLoopBB = PreLoopBB->splitBasicBlock(InsertBefore, "memcpy-split"); in createMemCpyLoopKnownSize()
125 "Atomic memcpy lowering is not supported for selected operand size"); in createMemCpyLoopKnownSize()
186 PreLoopBB->splitBasicBlock(InsertBefore, "post-loop-memcpy-expansion"); in createMemCpyLoopUnknownSize()
203 "Atomic memcpy lowering is not supported for vector operand type"); in createMemCpyLoopUnknownSize()
206 "Atomic memcpy lowering is not supported for selected operand size"); in createMemCpyLoopUnknownSize()
214 "expected size argument to memcpy to be an integer type!"); in createMemCpyLoopUnknownSize()
224 BasicBlock::Create(Ctx, "loop-memcpy-expansion", ParentFunc, PostLoopBB); in createMemCpyLoopUnknownSize()
273 BasicBlock *ResLoopBB = BasicBlock::Create(Ctx, "loop-memcpy-residual", in createMemCpyLoopUnknownSize()
278 Ctx, "loop-memcpy-residual-header", PreLoopBB->getParent(), nullptr); in createMemCpyLoopUnknownSize()
283 // non-zero and finally branch to after the residual loop if the memcpy in createMemCpyLoopUnknownSize()
339 // terminators for the preloop block and the memcpy loop. in createMemCpyLoopUnknownSize()
502 static bool canOverlap(MemTransferBase<T> *Memcpy, ScalarEvolution *SE) { in canOverlap() argument
504 auto *SrcSCEV = SE->getSCEV(Memcpy->getRawSource()); in canOverlap()
505 auto *DestSCEV = SE->getSCEV(Memcpy->getRawDest()); in canOverlap()
506 if (SE->isKnownPredicateAt(CmpInst::ICMP_NE, SrcSCEV, DestSCEV, Memcpy)) in canOverlap()
512 void llvm::expandMemCpyAsLoop(MemCpyInst *Memcpy, in expandMemCpyAsLoop() argument
515 bool CanOverlap = canOverlap(Memcpy, SE); in expandMemCpyAsLoop()
516 if (ConstantInt *CI = dyn_cast<ConstantInt>(Memcpy->getLength())) { in expandMemCpyAsLoop()
518 /* InsertBefore */ Memcpy, in expandMemCpyAsLoop()
519 /* SrcAddr */ Memcpy->getRawSource(), in expandMemCpyAsLoop()
520 /* DstAddr */ Memcpy->getRawDest(), in expandMemCpyAsLoop()
522 /* SrcAlign */ Memcpy->getSourceAlign().valueOrOne(), in expandMemCpyAsLoop()
523 /* DestAlign */ Memcpy->getDestAlign().valueOrOne(), in expandMemCpyAsLoop()
524 /* SrcIsVolatile */ Memcpy->isVolatile(), in expandMemCpyAsLoop()
525 /* DstIsVolatile */ Memcpy->isVolatile(), in expandMemCpyAsLoop()
530 /* InsertBefore */ Memcpy, in expandMemCpyAsLoop()
531 /* SrcAddr */ Memcpy->getRawSource(), in expandMemCpyAsLoop()
532 /* DstAddr */ Memcpy->getRawDest(), in expandMemCpyAsLoop()
533 /* CopyLen */ Memcpy->getLength(), in expandMemCpyAsLoop()
534 /* SrcAlign */ Memcpy->getSourceAlign().valueOrOne(), in expandMemCpyAsLoop()
535 /* DestAlign */ Memcpy->getDestAlign().valueOrOne(), in expandMemCpyAsLoop()
536 /* SrcIsVolatile */ Memcpy->isVolatile(), in expandMemCpyAsLoop()
537 /* DstIsVolatile */ Memcpy->isVolatile(), in expandMemCpyAsLoop()
559 // to. Expand as memcpy. in expandMemMoveAsLoop()