diff options
author | Nuno Lopes <nunoplopes@sapo.pt> | 2012-07-06 23:09:25 +0000 |
---|---|---|
committer | Nuno Lopes <nunoplopes@sapo.pt> | 2012-07-06 23:09:25 +0000 |
commit | 9969458b1673648394fce3f50f3f4a84071c7ca7 (patch) | |
tree | 253c1ee0feb6cc68ff421a433088fba1eb227f3d /test/Transforms/InstCombine/badmalloc.ll | |
parent | eb54603ddd4fb9fc255372c7904dc0dd6a162968 (diff) | |
download | llvm-9969458b1673648394fce3f50f3f4a84071c7ca7.tar.gz llvm-9969458b1673648394fce3f50f3f4a84071c7ca7.tar.bz2 llvm-9969458b1673648394fce3f50f3f4a84071c7ca7.tar.xz |
teach instcombine to remove allocated buffers even if there are stores, memcpy/memmove/memset, and objectsize users.
This means we can do cheap DSE for heap memory.
Nothing is done if the pointer excapes or has a load.
The churn in the tests is mostly due to objectsize, since we want to make sure we
don't delete the malloc call before evaluating the objectsize (otherwise it becomes -1/0)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159876 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/InstCombine/badmalloc.ll')
-rw-r--r-- | test/Transforms/InstCombine/badmalloc.ll | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/test/Transforms/InstCombine/badmalloc.ll b/test/Transforms/InstCombine/badmalloc.ll index f5a623dc77..3abe28aede 100644 --- a/test/Transforms/InstCombine/badmalloc.ll +++ b/test/Transforms/InstCombine/badmalloc.ll @@ -16,5 +16,26 @@ define i1 @test1() { ret i1 %B ; CHECK: @test1 -; CHECK: ret i1 %B +; CHECK: ret i1 false +} + +; CHECK: @test2 +define noalias i8* @test2() nounwind { +entry: +; CHECK: @malloc + %A = call noalias i8* @malloc(i64 4) nounwind +; CHECK: icmp eq + %tobool = icmp eq i8* %A, null +; CHECK: br i1 + br i1 %tobool, label %return, label %if.end + +if.end: +; CHECK: store + store i8 7, i8* %A + br label %return + +return: +; CHECK: phi + %retval.0 = phi i8* [ %A, %if.end ], [ null, %entry ] + ret i8* %retval.0 } |