[SimplifyLibCalls] Add dereferenceable bytes from known callsites
authorDavid Bolvansky <david.bolvansky@gmail.com>
Tue, 13 Aug 2019 09:11:49 +0000 (09:11 +0000)
committerDavid Bolvansky <david.bolvansky@gmail.com>
Tue, 13 Aug 2019 09:11:49 +0000 (09:11 +0000)
commit39130314feeda2d3e0f8966c3809e9cd73ff6b22
treeacb2b831e8a280cc449b00d930e6fec49f4a1144
parent09eb71ced3b80211f3997bd7bc2844c61cd265c7
[SimplifyLibCalls] Add dereferenceable bytes from known callsites

Summary:
int mm(char *a, char *b) {
    return memcmp(a,b,16);
}

Currently:
define dso_local i32 @mm(i8* nocapture readonly %a, i8* nocapture readonly %b) local_unnamed_addr #1 {
entry:
  %call = tail call i32 @memcmp(i8* %a, i8* %b, i64 16)
  ret i32 %call
}

After patch:
define dso_local i32 @mm(i8* nocapture readonly %a, i8* nocapture readonly %b) local_unnamed_addr #1 {
entry:
  %call = tail call i32 @memcmp(i8* dereferenceable(16)  %a, i8* dereferenceable(16)  %b, i64 16)
  ret i32 %call
}

Reviewers: jdoerfert, efriedma

Reviewed By: jdoerfert

Subscribers: javed.absar, spatel, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D66079

llvm-svn: 368657
22 files changed:
llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h
llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
llvm/test/Analysis/TypeBasedAliasAnalysis/memcpyopt.ll
llvm/test/Transforms/InstCombine/ARM/strcmp.ll
llvm/test/Transforms/InstCombine/align-addr.ll
llvm/test/Transforms/InstCombine/mem-deref-bytes.ll [new file with mode: 0644]
llvm/test/Transforms/InstCombine/memchr.ll
llvm/test/Transforms/InstCombine/memcmp-constant-fold.ll
llvm/test/Transforms/InstCombine/memcpy-from-global.ll
llvm/test/Transforms/InstCombine/memcpy-to-load.ll
llvm/test/Transforms/InstCombine/memcpy.ll
llvm/test/Transforms/InstCombine/memcpy_chk-1.ll
llvm/test/Transforms/InstCombine/memmove_chk-1.ll
llvm/test/Transforms/InstCombine/memset_chk-1.ll
llvm/test/Transforms/InstCombine/objsize.ll
llvm/test/Transforms/InstCombine/sprintf-1.ll
llvm/test/Transforms/InstCombine/stpcpy_chk-1.ll
llvm/test/Transforms/InstCombine/strcmp-1.ll
llvm/test/Transforms/InstCombine/strcmp-memcmp.ll
llvm/test/Transforms/InstCombine/strcpy_chk-1.ll
llvm/test/Transforms/InstCombine/strncpy_chk-1.ll
llvm/test/Transforms/MemCpyOpt/memcpy-to-memset-with-lifetimes.ll