summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNadav Rotem <nrotem@apple.com>2013-04-09 04:43:46 +0000
committerNadav Rotem <nrotem@apple.com>2013-04-09 04:43:46 +0000
commite43e2d8cf0a5a05a1d1ed5abbc2134834a9b06d2 (patch)
treed9c3b1c5a89293136e4e16b14a3760d0274aa4ea
parent6ed9284c2bcfb81fa0303409c6bd4366bc1e822a (diff)
Revert 179071 because it is not the right way to support non standard new/new[] operators.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179084 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Analysis/MemoryBuiltins.cpp8
-rw-r--r--test/Transforms/GVN/newoperator.ll20
-rw-r--r--test/Transforms/InstCombine/invoke.ll16
-rw-r--r--test/Transforms/InstCombine/objsize-64.ll2
4 files changed, 25 insertions, 21 deletions
diff --git a/lib/Analysis/MemoryBuiltins.cpp b/lib/Analysis/MemoryBuiltins.cpp
index 0bf0b47879..d490d5419f 100644
--- a/lib/Analysis/MemoryBuiltins.cpp
+++ b/lib/Analysis/MemoryBuiltins.cpp
@@ -52,6 +52,14 @@ struct AllocFnsTy {
static const AllocFnsTy AllocationFnData[] = {
{LibFunc::malloc, MallocLike, 1, 0, -1},
{LibFunc::valloc, MallocLike, 1, 0, -1},
+ {LibFunc::Znwj, MallocLike, 1, 0, -1}, // new(unsigned int)
+ {LibFunc::ZnwjRKSt9nothrow_t, MallocLike, 2, 0, -1}, // new(unsigned int, nothrow)
+ {LibFunc::Znwm, MallocLike, 1, 0, -1}, // new(unsigned long)
+ {LibFunc::ZnwmRKSt9nothrow_t, MallocLike, 2, 0, -1}, // new(unsigned long, nothrow)
+ {LibFunc::Znaj, MallocLike, 1, 0, -1}, // new[](unsigned int)
+ {LibFunc::ZnajRKSt9nothrow_t, MallocLike, 2, 0, -1}, // new[](unsigned int, nothrow)
+ {LibFunc::Znam, MallocLike, 1, 0, -1}, // new[](unsigned long)
+ {LibFunc::ZnamRKSt9nothrow_t, MallocLike, 2, 0, -1}, // new[](unsigned long, nothrow)
{LibFunc::posix_memalign, MallocLike, 3, 2, -1},
{LibFunc::calloc, CallocLike, 2, 0, 1},
{LibFunc::realloc, ReallocLike, 2, 1, -1},
diff --git a/test/Transforms/GVN/newoperator.ll b/test/Transforms/GVN/newoperator.ll
deleted file mode 100644
index 21cfc1db6e..0000000000
--- a/test/Transforms/GVN/newoperator.ll
+++ /dev/null
@@ -1,20 +0,0 @@
-; RUN: opt < %s -basicaa -gvn -S | FileCheck %s
-
-; We can't remove the load because new operators are overideable and can return non-undefined memory.
-;CHECK: main
-;CHECK: load
-;CHECK: ret
-define i32 @main(i32 %argc, i8** nocapture %argv) ssp uwtable {
- %1 = tail call noalias i8* @_Znam(i64 800)
- %2 = bitcast i8* %1 to i32**
- %3 = load i32** %2, align 8, !tbaa !0
- %4 = icmp eq i32* %3, null
- %5 = zext i1 %4 to i32
- ret i32 %5
-}
-
-declare noalias i8* @_Znam(i64)
-
-!0 = metadata !{metadata !"any pointer", metadata !1}
-!1 = metadata !{metadata !"omnipotent char", metadata !2}
-!2 = metadata !{metadata !"Simple C/C++ TBAA"}
diff --git a/test/Transforms/InstCombine/invoke.ll b/test/Transforms/InstCombine/invoke.ll
index 4ef86ddb4d..04eaf86a28 100644
--- a/test/Transforms/InstCombine/invoke.ll
+++ b/test/Transforms/InstCombine/invoke.ll
@@ -47,3 +47,19 @@ lpad:
unreachable
}
+; CHECK: @f3
+define void @f3() nounwind uwtable ssp {
+; CHECK: invoke void @llvm.donothing()
+ %call = invoke noalias i8* @_Znwm(i64 13)
+ to label %invoke.cont unwind label %lpad
+
+invoke.cont:
+ ret void
+
+lpad:
+ %1 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
+ filter [0 x i8*] zeroinitializer
+ %2 = extractvalue { i8*, i32 } %1, 0
+ tail call void @__cxa_call_unexpected(i8* %2) noreturn nounwind
+ unreachable
+}
diff --git a/test/Transforms/InstCombine/objsize-64.ll b/test/Transforms/InstCombine/objsize-64.ll
index 6ecc830440..530e1234b4 100644
--- a/test/Transforms/InstCombine/objsize-64.ll
+++ b/test/Transforms/InstCombine/objsize-64.ll
@@ -25,7 +25,7 @@ entry:
to label %invoke.cont unwind label %lpad
invoke.cont:
-; CHECK: ret i64 %0
+; CHECK: ret i64 13
store i8* %call, i8** %esc
%0 = tail call i64 @llvm.objectsize.i64(i8* %call, i1 false)
ret i64 %0