[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