[Statepoints 1/4] Statepoint infrastructure for garbage collection: IR Intrinsics
[oota-llvm.git] / test / Verifier / inalloca2.ll
index acdd9ae3a66b46b7e97a04d0bad4288dee0092a4..12a454999285737b3166fe94fe462d579e8d7377 100644 (file)
@@ -1,21 +1,39 @@
-; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
+; This used to be invalid, but now it's valid.  Ensure the verifier
+; doesn't reject it.
+; RUN: llvm-as %s -o /dev/null
 
 declare void @doit(i64* inalloca %a)
 
 define void @a() {
 entry:
-  %a = alloca [2 x i32]
+  %a = alloca inalloca [2 x i32]
   %b = bitcast [2 x i32]* %a to i64*
   call void @doit(i64* inalloca %b)
-; CHECK: Inalloca argument is not an alloca!
   ret void
 }
 
 define void @b() {
 entry:
-  %a = alloca i64
+  %a = alloca inalloca i64
   call void @doit(i64* inalloca %a)
   call void @doit(i64* inalloca %a)
-; CHECK: Allocas can be used at most once with inalloca!
+  ret void
+}
+
+define void @c(i1 %cond) {
+entry:
+  br i1 %cond, label %if, label %else
+
+if:
+  %a = alloca inalloca i64
+  br label %call
+
+else:
+  %b = alloca inalloca i64
+  br label %call
+
+call:
+  %args = phi i64* [ %a, %if ], [ %b, %else ]
+  call void @doit(i64* inalloca %args)
   ret void
 }