diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-01-15 01:00:33 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-01-15 01:00:33 +0000 |
commit | e78bb1249e124ce194b471c13248fd7038a3b4ca (patch) | |
tree | f7d9285e6e47f917436f3381d4a83086e27b1583 /llvm/test/Transforms/InstCombine | |
parent | a487aa4cdbd37b9d6f53532971415bb1f5c45b23 (diff) | |
download | bcm5719-llvm-e78bb1249e124ce194b471c13248fd7038a3b4ca.tar.gz bcm5719-llvm-e78bb1249e124ce194b471c13248fd7038a3b4ca.zip |
For PR21145: recognise a builtin call to a known deallocation function even if
it's defined in the current module. Clang generates this situation for the
C++14 sized deallocation functions, because it generates a weak definition in
case one isn't provided by the C++ runtime library.
llvm-svn: 226069
Diffstat (limited to 'llvm/test/Transforms/InstCombine')
-rw-r--r-- | llvm/test/Transforms/InstCombine/malloc-free-delete.ll | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/llvm/test/Transforms/InstCombine/malloc-free-delete.ll b/llvm/test/Transforms/InstCombine/malloc-free-delete.ll index ed25e4e49c8..765c8c35c92 100644 --- a/llvm/test/Transforms/InstCombine/malloc-free-delete.ll +++ b/llvm/test/Transforms/InstCombine/malloc-free-delete.ll @@ -146,17 +146,36 @@ lpad.i: ; preds = %entry } declare i8* @_Znwm(i64) nobuiltin -declare void @_ZdlPvm(i8*, i64) nobuiltin declare i8* @_Znwj(i32) nobuiltin -declare void @_ZdlPvj(i8*, i32) nobuiltin declare i8* @_Znam(i64) nobuiltin -declare void @_ZdaPvm(i8*, i64) nobuiltin declare i8* @_Znaj(i32) nobuiltin -declare void @_ZdaPvj(i8*, i32) nobuiltin +declare void @_ZdlPv(i8*) nobuiltin +declare void @_ZdaPv(i8*) nobuiltin + +define linkonce void @_ZdlPvm(i8* %p, i64) nobuiltin { + call void @_ZdlPv(i8* %p) + ret void +} +define linkonce void @_ZdlPvj(i8* %p, i32) nobuiltin { + call void @_ZdlPv(i8* %p) + ret void +} +define linkonce void @_ZdaPvm(i8* %p, i64) nobuiltin { + call void @_ZdaPv(i8* %p) + ret void +} +define linkonce void @_ZdaPvj(i8* %p, i32) nobuiltin { + call void @_ZdaPv(i8* %p) + ret void +} ; CHECK-LABEL: @test8( define void @test8() { ; CHECK-NOT: call + %nw = call i8* @_Znwm(i64 32) builtin + call void @_ZdlPv(i8* %nw) builtin + %na = call i8* @_Znam(i64 32) builtin + call void @_ZdaPv(i8* %na) builtin %nwm = call i8* @_Znwm(i64 32) builtin call void @_ZdlPvm(i8* %nwm, i64 32) builtin %nwj = call i8* @_Znwj(i32 32) builtin |