From e43e2d8cf0a5a05a1d1ed5abbc2134834a9b06d2 Mon Sep 17 00:00:00 2001 From: Nadav Rotem Date: Tue, 9 Apr 2013 04:43:46 +0000 Subject: [PATCH] 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 --- lib/Analysis/MemoryBuiltins.cpp | 8 ++++++++ test/Transforms/GVN/newoperator.ll | 20 -------------------- test/Transforms/InstCombine/invoke.ll | 16 ++++++++++++++++ test/Transforms/InstCombine/objsize-64.ll | 2 +- 4 files changed, 25 insertions(+), 21 deletions(-) delete mode 100644 test/Transforms/GVN/newoperator.ll diff --git a/lib/Analysis/MemoryBuiltins.cpp b/lib/Analysis/MemoryBuiltins.cpp index 0bf0b478795..d490d5419f7 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 21cfc1db6e1..00000000000 --- 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 4ef86ddb4d0..04eaf86a287 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 6ecc8304408..530e1234b4a 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 -- 2.11.0