diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-09-24 17:15:14 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-09-24 17:15:14 +0000 |
| commit | 4d4df0435395c006d2ab52a946d50b7e08f0696e (patch) | |
| tree | 09f8567c038b80b8bc5e0ea177b9fa94efe9b974 /llvm | |
| parent | dc4c1adfc7995776ce6be31a4bd452cd8e50e72c (diff) | |
| download | bcm5719-llvm-4d4df0435395c006d2ab52a946d50b7e08f0696e.tar.gz bcm5719-llvm-4d4df0435395c006d2ab52a946d50b7e08f0696e.zip | |
MemoryBuiltins: Fix operator new bits.
We really don't want to optimize malloc return value checks away.
llvm-svn: 191313
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Analysis/MemoryBuiltins.cpp | 6 | ||||
| -rw-r--r-- | llvm/test/Transforms/InstSimplify/call.ll | 20 |
2 files changed, 23 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp index 2ec2aec4aa0..b904cb188c4 100644 --- a/llvm/lib/Analysis/MemoryBuiltins.cpp +++ b/llvm/lib/Analysis/MemoryBuiltins.cpp @@ -35,9 +35,9 @@ enum AllocType { CallocLike = 1<<1, // allocates + bzero ReallocLike = 1<<2, // reallocates StrDupLike = 1<<3, - OpNewLike = MallocLike | (1<<4), // allocates; never returns null - AllocLike = MallocLike | CallocLike | StrDupLike, - AnyAlloc = MallocLike | CallocLike | ReallocLike | StrDupLike + OpNewLike = 1<<4, // allocates; never returns null + AllocLike = MallocLike | CallocLike | StrDupLike | OpNewLike, + AnyAlloc = AllocLike | ReallocLike }; struct AllocFnsTy { diff --git a/llvm/test/Transforms/InstSimplify/call.ll b/llvm/test/Transforms/InstSimplify/call.ll index aa3b08653ad..89d42381015 100644 --- a/llvm/test/Transforms/InstSimplify/call.ll +++ b/llvm/test/Transforms/InstSimplify/call.ll @@ -121,3 +121,23 @@ cast.end: ; preds = %cast.notnull, %entr } declare noalias i8* @_Znwm(i64) + +define i8* @malloc_can_return_null() { +entry: + %call = tail call noalias i8* @malloc(i64 8) + %cmp = icmp eq i8* %call, null + br i1 %cmp, label %cast.end, label %cast.notnull + +cast.notnull: ; preds = %entry + %add.ptr = getelementptr inbounds i8* %call, i64 4 + br label %cast.end + +cast.end: ; preds = %cast.notnull, %entry + %cast.result = phi i8* [ %add.ptr, %cast.notnull ], [ null, %entry ] + ret i8* %cast.result + +; CHECK-LABEL: @malloc_can_return_null +; CHECK: br i1 %cmp, label %cast.end, label %cast.notnull +} + +declare noalias i8* @malloc(i64) |

