Fix test.
[oota-llvm.git] / test / Transforms / FunctionAttrs / 2008-12-31-NoCapture.ll
index 61c607dc007ef603ecac57b42572ca714ccb960b..53857f61ce5829192ea942105722bf222d9aeb5a 100644 (file)
@@ -1,5 +1,5 @@
-; RUN: llvm-as < %s | opt -functionattrs | llvm-dis | not grep {nocapture *%%q}
-; RUN: llvm-as < %s | opt -functionattrs | llvm-dis | grep {nocapture *%%p} | count 3
+; RUN: opt < %s -functionattrs -S | not grep {nocapture *%%q}
+; RUN: opt < %s -functionattrs -S | grep {nocapture *%%p} | count 6
 @g = global i32* null          ; <i32**> [#uses=1]
 
 define i32* @c1(i32* %q) {
@@ -39,6 +39,31 @@ define i1 @c5(i32* %q, i32 %bitno) {
        ret i1 %val
 }
 
+declare void @throw_if_bit_set(i8*, i8) readonly
+define i1 @c6(i8* %q, i8 %bit) {
+       invoke void @throw_if_bit_set(i8* %q, i8 %bit)
+               to label %ret0 unwind label %ret1
+ret0:
+       ret i1 0
+ret1:
+       ret i1 1
+}
+
+define i1* @lookup_bit(i32* %q, i32 %bitno) readnone nounwind {
+       %tmp = ptrtoint i32* %q to i32
+       %tmp2 = lshr i32 %tmp, %bitno
+       %bit = and i32 %tmp2, 1
+       %lookup = getelementptr [2 x i1]* @lookup_table, i32 0, i32 %bit
+       ret i1* %lookup
+}
+
+define i1 @c7(i32* %q, i32 %bitno) {
+       %ptr = call i1* @lookup_bit(i32* %q, i32 %bitno)
+       %val = load i1* %ptr
+       ret i1 %val
+}
+
+
 define i32 @nc1(i32* %q, i32* %p, i1 %b) {
 e:
        br label %l
@@ -62,3 +87,15 @@ define void @nc3(void ()* %p) {
        call void %p()
        ret void
 }
+
+declare void @external(i8*) readonly nounwind
+define void @nc4(i8* %p) {
+       call void @external(i8* %p)
+       ret void
+}
+
+define void @nc5(void (i8*)* %f, i8* %p) {
+       call void %f(i8* %p) readonly nounwind
+       call void %f(i8* nocapture %p)
+       ret void
+}