diff options
author | Sean Fertile <sfertile@ca.ibm.com> | 2017-12-15 19:29:12 +0000 |
---|---|---|
committer | Sean Fertile <sfertile@ca.ibm.com> | 2017-12-15 19:29:12 +0000 |
commit | 7edcd376d38df602f9c4618108063f2b2933edda (patch) | |
tree | dc8971ee77dd8f0b34e8aed297d471732caff78c | |
parent | 5386758b51802d0874f0c123491876fef721c0e2 (diff) |
[Memcpy Loop Lowering] Insert loop BB inbetween the split BB.
The original memcpy expansion inserted the loop basic block inbetween
the 2 new basic blocks created by splitting the original block the memcpy
call was in. This commit makes the new memcpy expansion do the same to keep the
layout of the IR matching between the old and new implementations.
Differential Review: https://reviews.llvm.org/D41197
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320848 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Utils/LowerMemIntrinsics.cpp | 5 | ||||
-rw-r--r-- | test/CodeGen/NVPTX/lower-aggr-copies.ll | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/Transforms/Utils/LowerMemIntrinsics.cpp b/lib/Transforms/Utils/LowerMemIntrinsics.cpp index 900450b4006..33b8f62ea89 100644 --- a/lib/Transforms/Utils/LowerMemIntrinsics.cpp +++ b/lib/Transforms/Utils/LowerMemIntrinsics.cpp @@ -174,7 +174,7 @@ void llvm::createMemCpyLoopUnknownSize(Instruction *InsertBefore, Value *RuntimeBytesCopied = PLBuilder.CreateSub(CopyLen, RuntimeResidual); BasicBlock *LoopBB = - BasicBlock::Create(Ctx, "loop-memcpy-expansion", ParentFunc, nullptr); + BasicBlock::Create(Ctx, "loop-memcpy-expansion", ParentFunc, PostLoopBB); IRBuilder<> LoopBuilder(LoopBB); PHINode *LoopIndex = LoopBuilder.CreatePHI(CopyLenType, 2, "loop-index"); @@ -193,7 +193,8 @@ void llvm::createMemCpyLoopUnknownSize(Instruction *InsertBefore, if (LoopOpType != Int8Type) { // Loop body for the residual copy. BasicBlock *ResLoopBB = BasicBlock::Create(Ctx, "loop-memcpy-residual", - PreLoopBB->getParent(), nullptr); + PreLoopBB->getParent(), + PostLoopBB); // Residual loop header. BasicBlock *ResHeaderBB = BasicBlock::Create( Ctx, "loop-memcpy-residual-header", PreLoopBB->getParent(), nullptr); diff --git a/test/CodeGen/NVPTX/lower-aggr-copies.ll b/test/CodeGen/NVPTX/lower-aggr-copies.ll index 4298442157e..34654910613 100644 --- a/test/CodeGen/NVPTX/lower-aggr-copies.ll +++ b/test/CodeGen/NVPTX/lower-aggr-copies.ll @@ -50,6 +50,9 @@ entry: ; WIR: [[IndexInc]] = add i64 %loop-index, 1 ; WIR: [[Cond2:%[0-9]+]] = icmp ult i64 [[IndexInc]], [[LoopCount]] ; WIR: br i1 [[Cond2]], label %loop-memcpy-expansion, label %post-loop-memcpy-expansion + +; WIR-LABEL: post-loop-memcpy-expansion: +; WIR: ret i8* %dst } define i8* @memcpy_volatile_caller(i8* %dst, i8* %src, i64 %n) #0 { @@ -85,6 +88,9 @@ entry: ; WIR: [[IndexInc]] = add i64 %loop-index, 1 ; WIR: [[Cond2:%[0-9]+]] = icmp ult i64 [[IndexInc]], [[LoopCount]] ; WIR: br i1 [[Cond2]], label %loop-memcpy-expansion, label %post-loop-memcpy-expansion + +; WIR-LABEL: post-loop-memcpy-expansion: +; WIR: ret i8* %dst } define i8* @memcpy_casting_caller(i32* %dst, i32* %src, i64 %n) #0 { |