summaryrefslogtreecommitdiff
path: root/test/Transforms/InstSimplify
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2013-09-24 18:37:49 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2013-09-24 18:37:49 +0000
commit7e720f485f32b255671793ad6d7312681752462a (patch)
treeaea433eba935304e368b929389bd7f0e1e708cfd /test/Transforms/InstSimplify
parent4da61345ec553a4f3ab3cedf6f21452374f1fda1 (diff)
downloadllvm-7e720f485f32b255671793ad6d7312681752462a.tar.gz
llvm-7e720f485f32b255671793ad6d7312681752462a.tar.bz2
llvm-7e720f485f32b255671793ad6d7312681752462a.tar.xz
Verify that we don't optimize null return checks to the nothrow_t version of operator new.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191325 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/InstSimplify')
-rw-r--r--test/Transforms/InstSimplify/call.ll23
1 files changed, 23 insertions, 0 deletions
diff --git a/test/Transforms/InstSimplify/call.ll b/test/Transforms/InstSimplify/call.ll
index 89d4238101..fd854c5b46 100644
--- a/test/Transforms/InstSimplify/call.ll
+++ b/test/Transforms/InstSimplify/call.ll
@@ -122,6 +122,29 @@ cast.end: ; preds = %cast.notnull, %entr
declare noalias i8* @_Znwm(i64)
+%"struct.std::nothrow_t" = type { i8 }
+@_ZSt7nothrow = external global %"struct.std::nothrow_t"
+
+define i8* @operator_new_nothrow_t() {
+entry:
+ %call = tail call noalias i8* @_ZnamRKSt9nothrow_t(i64 8, %"struct.std::nothrow_t"* @_ZSt7nothrow)
+ %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: @operator_new_nothrow_t
+; CHECK: br i1 %cmp, label %cast.end, label %cast.notnull
+}
+
+declare i8* @_ZnamRKSt9nothrow_t(i64, %"struct.std::nothrow_t"*) nounwind
+
define i8* @malloc_can_return_null() {
entry:
%call = tail call noalias i8* @malloc(i64 8)