Move sprintf simplifier tests to test/Transforms/InstCombine
[oota-llvm.git] / test / Transforms / InstCombine / LandingPadClauses.ll
index e96bf4c7f4ca53a59828a59cab3f65a21f60195d..de3b2d34fb9474126e315eb30d31b7e0b048d34c 100644 (file)
@@ -6,6 +6,7 @@
 
 declare i32 @generic_personality(i32, i64, i8*, i8*)
 declare i32 @__gxx_personality_v0(i32, i64, i8*, i8*)
+declare i32 @__objc_personality_v0(i32, i64, i8*, i8*)
 
 declare void @bar()
 
@@ -35,6 +36,9 @@ cont.g:
   invoke void @bar()
     to label %cont.h unwind label %lpad.h
 cont.h:
+  invoke void @bar()
+    to label %cont.i unwind label %lpad.i
+cont.i:
   ret void
 
 lpad.a:
@@ -115,6 +119,15 @@ lpad.h:
 ; CHECK: %h = landingpad
 ; CHECK-NEXT: filter [1 x i32*] zeroinitializer
 ; CHECK-NEXT: unreachable
+
+lpad.i:
+  %i = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* @generic_personality
+          cleanup
+          filter [0 x i32*] zeroinitializer
+  unreachable
+; CHECK: %i = landingpad
+; CHECK-NEXT: filter
+; CHECK-NEXT: unreachable
 }
 
 define void @foo_cxx() {
@@ -128,6 +141,9 @@ cont.b:
   invoke void @bar()
     to label %cont.c unwind label %lpad.c
 cont.c:
+  invoke void @bar()
+    to label %cont.d unwind label %lpad.d
+cont.d:
   ret void
 
 lpad.a:
@@ -154,4 +170,64 @@ lpad.c:
 ; CHECK: %c = landingpad
 ; CHECK-NEXT: cleanup
 ; CHECK-NEXT: unreachable
+
+lpad.d:
+  %d = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* @__gxx_personality_v0
+          cleanup
+          catch i32* null
+  unreachable
+; CHECK: %d = landingpad
+; CHECK-NEXT: null
+; CHECK-NEXT: unreachable
+}
+
+define void @foo_objc() {
+; CHECK: @foo_objc
+  invoke void @bar()
+    to label %cont.a unwind label %lpad.a
+cont.a:
+  invoke void @bar()
+    to label %cont.b unwind label %lpad.b
+cont.b:
+  invoke void @bar()
+    to label %cont.c unwind label %lpad.c
+cont.c:
+  invoke void @bar()
+    to label %cont.d unwind label %lpad.d
+cont.d:
+  ret void
+
+lpad.a:
+  %a = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* @__objc_personality_v0
+          catch i32* null
+          catch i32* @T1
+  unreachable
+; CHECK: %a = landingpad
+; CHECK-NEXT: null
+; CHECK-NEXT: unreachable
+
+lpad.b:
+  %b = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* @__objc_personality_v0
+          filter [1 x i32*] zeroinitializer
+  unreachable
+; CHECK: %b = landingpad
+; CHECK-NEXT: cleanup
+; CHECK-NEXT: unreachable
+
+lpad.c:
+  %c = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* @__objc_personality_v0
+          filter [2 x i32*] [i32* @T1, i32* null]
+  unreachable
+; CHECK: %c = landingpad
+; CHECK-NEXT: cleanup
+; CHECK-NEXT: unreachable
+
+lpad.d:
+  %d = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* @__objc_personality_v0
+          cleanup
+          catch i32* null
+  unreachable
+; CHECK: %d = landingpad
+; CHECK-NEXT: null
+; CHECK-NEXT: unreachable
 }