[llvm] r228500 - Properly update AA metadata when performing call slot optimization
Hal Finkel
hfinkel at anl.gov
Sat Feb 7 11:36:43 PST 2015
----- Original Message -----
> From: "Hans Wennborg" <hans at chromium.org>
> To: "Bjorn Steinbrink" <bsteinbr at gmail.com>, "Hal Finkel" <hfinkel at anl.gov>
> Cc: "llvm-commits" <llvm-commits at cs.uiuc.edu>
> Sent: Saturday, February 7, 2015 1:28:32 PM
> Subject: Re: [llvm] r228500 - Properly update AA metadata when performing call slot optimization
>
> Hal,
>
> Is this okay for merging to 3.6? Björn pointed out in PR22501 that
> this fixes a regression from 3.5.
Yes, go ahead.
Thanks again,
Hal
>
> 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
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-commits
mailing list