[llvm] r228500 - Properly update AA metadata when performing call slot optimization

Hans Wennborg hans at chromium.org
Sat Feb 7 11:28:32 PST 2015


Hal,

Is this okay for merging to 3.6? Björn pointed out in PR22501 that
this fixes a regression from 3.5.

Thanks,
Hans

On Sat, Feb 7, 2015 at 9:54 AM, Bjorn Steinbrink <bsteinbr at gmail.com> wrote:
> Author: bsteinbr
> Date: Sat Feb  7 11:54:36 2015
> New Revision: 228500
>
> URL: http://llvm.org/viewvc/llvm-project?rev=228500&view=rev
> Log:
> Properly update AA metadata when performing call slot optimization
>
> Subscribers: llvm-commits
>
> Differential Revision: http://reviews.llvm.org/D7482
>
> Added:
>     llvm/trunk/test/Transforms/MemCpyOpt/callslot_aa.ll
> Modified:
>     llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=228500&r1=228499&r2=228500&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Sat Feb  7 11:54:36 2015
> @@ -750,6 +750,16 @@ bool MemCpyOpt::performCallSlotOptzn(Ins
>    // its dependence information by changing its parameter.
>    MD->removeInstruction(C);
>
> +  // Update AA metadata
> +  // FIXME: MD_tbaa_struct and MD_mem_parallel_loop_access should also be
> +  // handled here, but combineMetadata doesn't support them yet
> +  unsigned KnownIDs[] = {
> +    LLVMContext::MD_tbaa,
> +    LLVMContext::MD_alias_scope,
> +    LLVMContext::MD_noalias,
> +  };
> +  combineMetadata(C, cpy, KnownIDs);
> +
>    // Remove the memcpy.
>    MD->removeInstruction(cpy);
>    ++NumMemCpyInstr;
>
> Added: llvm/trunk/test/Transforms/MemCpyOpt/callslot_aa.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MemCpyOpt/callslot_aa.ll?rev=228500&view=auto
> ==============================================================================
> --- llvm/trunk/test/Transforms/MemCpyOpt/callslot_aa.ll (added)
> +++ llvm/trunk/test/Transforms/MemCpyOpt/callslot_aa.ll Sat Feb  7 11:54:36 2015
> @@ -0,0 +1,22 @@
> +; RUN: opt < %s -S -basicaa -memcpyopt | FileCheck %s
> +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
> +
> +%T = type { i64, i64 }
> +
> +define void @test(i8* %src) {
> +  %tmp = alloca i8
> +  %dst = alloca i8
> +; CHECK:   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 1, i32 8, i1 false)
> +  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* %src, i64 1, i32 8, i1 false), !noalias !2
> +  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %tmp, i64 1, i32 8, i1 false)
> +
> +  ret void
> +}
> +
> +declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i32, i1)
> +
> +; Check that the noalias for "dst" was removed by checking that the metadata is gone
> +; CHECK-NOT: "dst"
> +!0 = !{!0}
> +!1 = distinct !{!1, !0, !"dst"}
> +!2 = distinct !{!1}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list