diff options
author | Duncan Sands <baldrick@free.fr> | 2010-05-27 19:09:06 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2010-05-27 19:09:06 +0000 |
commit | f162eace49c2e155d32e20f6d224df3d3efe555a (patch) | |
tree | 2e66a8a4e18c7f99e4c826943ddf7544079239f6 /llvm/test/Transforms/InstCombine/malloc-free-delete.ll | |
parent | b68dfb45f5c9712e44329871bfc989b67ff687de (diff) | |
download | bcm5719-llvm-f162eace49c2e155d32e20f6d224df3d3efe555a.tar.gz bcm5719-llvm-f162eace49c2e155d32e20f6d224df3d3efe555a.zip |
Teach instCombine to remove malloc+free if malloc's only uses are comparisons
to null. Patch by Matti Niemenmaa.
llvm-svn: 104871
Diffstat (limited to 'llvm/test/Transforms/InstCombine/malloc-free-delete.ll')
-rw-r--r-- | llvm/test/Transforms/InstCombine/malloc-free-delete.ll | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/llvm/test/Transforms/InstCombine/malloc-free-delete.ll b/llvm/test/Transforms/InstCombine/malloc-free-delete.ll index a4b7496ef40..317786fc564 100644 --- a/llvm/test/Transforms/InstCombine/malloc-free-delete.ll +++ b/llvm/test/Transforms/InstCombine/malloc-free-delete.ll @@ -1,13 +1,25 @@ -; RUN: opt < %s -instcombine -globaldce -S | FileCheck %s +; RUN: opt < %s -instcombine -S | FileCheck %s ; PR1201 define i32 @main(i32 %argc, i8** %argv) { - %c_19 = alloca i8* ; <i8**> [#uses=2] - %malloc_206 = malloc i8, i32 10 ; <i8*> [#uses=1] + %c_19 = alloca i8* + %malloc_206 = malloc i8, i32 10 ; CHECK-NOT: malloc store i8* %malloc_206, i8** %c_19 - %tmp_207 = load i8** %c_19 ; <i8*> [#uses=1] + %tmp_207 = load i8** %c_19 free i8* %tmp_207 ; CHECK-NOT: free ret i32 0 ; CHECK: ret i32 0 } + +declare i8* @malloc(i32) +declare void @free(i8*) + +define i1 @foo() { +; CHECK: @foo +; CHECK-NEXT: ret i1 false + %m = call i8* @malloc(i32 1) + %z = icmp eq i8* %m, null + call void @free(i8* %m) + ret i1 %z +} |