[llvm] r191313 - MemoryBuiltins: Fix operator new bits.

Benjamin Kramer benny.kra at googlemail.com
Tue Sep 24 10:15:14 PDT 2013


Author: d0k
Date: Tue Sep 24 12:15:14 2013
New Revision: 191313

URL: http://llvm.org/viewvc/llvm-project?rev=191313&view=rev
Log:
MemoryBuiltins: Fix operator new bits.

We really don't want to optimize malloc return value checks away.

Modified:
    llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
    llvm/trunk/test/Transforms/InstSimplify/call.ll

Modified: llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryBuiltins.cpp?rev=191313&r1=191312&r2=191313&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/MemoryBuiltins.cpp (original)
+++ llvm/trunk/lib/Analysis/MemoryBuiltins.cpp Tue Sep 24 12:15:14 2013
@@ -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 {

Modified: llvm/trunk/test/Transforms/InstSimplify/call.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstSimplify/call.ll?rev=191313&r1=191312&r2=191313&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstSimplify/call.ll (original)
+++ llvm/trunk/test/Transforms/InstSimplify/call.ll Tue Sep 24 12:15:14 2013
@@ -121,3 +121,23 @@ cast.end:
 }
 
 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)





More information about the llvm-commits mailing list