[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