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

Hans Wennborg hans at chromium.org
Sat Feb 7 11:41:21 PST 2015


On Sat, Feb 7, 2015 at 11:36 AM, Hal Finkel <hfinkel at anl.gov> wrote:
> ----- 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.

Merged in r228504.

Cheers,
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