[PATCH] D27034: [AliasAnalysis] Teach BasicAA about memcpy.

bryant via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 22 20:59:58 PST 2016


bryant created this revision.
bryant added reviewers: dberlin, reames, hfinkel, efriedma.
bryant added a subscriber: llvm-commits.
bryant set the repository for this revision to rL LLVM.

From LangRef:

> The '``llvm.memcpy.*``' intrinsics copy a block of memory from the
>  source location to the destination location, which are not allowed to overlap.

Quick demo with `-aa-eval`:

  ; opt -basicaa -aa-eval -print-all-alias-modref-info Transforms/Util/MemorySSA/basicaa-memcpy.ll
  
  declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64,
                                          i32, i1) nounwind
  
  define void @source_clobber(i8* %a, i8* %b) {
    call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %b, i64 128, i32 1, i1 false)
    %x = load i8, i8* %b
    ret void
  }
  
  ; Function: source_clobber: 2 pointers, 1 call sites
  ;   MayAlias:     i8* %a, i8* %b
  ;   Just Mod:  Ptr: i8* %a        <->  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %b, i64 128, i32 1, i1 false)
  ;   Just Ref:  Ptr: i8* %b        <->  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %a, i8* %b, i64 128, i32 1, i1 false)

Note the "Just {Mod,Ref}" results.


Repository:
  rL LLVM

https://reviews.llvm.org/D27034

Files:
  lib/Analysis/BasicAliasAnalysis.cpp
  test/Analysis/BasicAA/assume.ll
  test/Analysis/BasicAA/cs-cs.ll
  test/Analysis/BasicAA/guards.ll
  test/Transforms/Util/MemorySSA/basicaa-memcpy.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27034.79020.patch
Type: text/x-patch
Size: 10735 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161123/d5d09dc6/attachment.bin>


More information about the llvm-commits mailing list