[InstCombine] Don't insert an instruction after a terminator
[oota-llvm.git] / test / Transforms / InstCombine / token.ll
index bb35d156064d2e85fa60586cf012e56afcc2bc4d..c8f1dc1bc312ef7207fbfeff19201a4dea33bc0e 100644 (file)
@@ -4,7 +4,7 @@ target triple = "x86_64-pc-windows-msvc18.0.0"
 
 declare i32 @__CxxFrameHandler3(...)
 
-define i8* @f() personality i32 (...)* @__CxxFrameHandler3 {
+define void @test1() personality i32 (...)* @__CxxFrameHandler3 {
 bb:
   unreachable
 
@@ -13,9 +13,45 @@ unreachable:
   cleanupret %cl unwind to caller
 }
 
+; CHECK-LABEL: define void @test1(
 ; CHECK: unreachable:
 ; CHECK:   %cl = cleanuppad []
 ; CHECK:   cleanupret %cl unwind to caller
 
+define void @test2(i8 %A, i8 %B) personality i32 (...)* @__CxxFrameHandler3 {
+bb:
+  %X = zext i8 %A to i32
+  invoke void @g(i32 0)
+    to label %cont
+    unwind label %catch
+
+cont:
+  %Y = zext i8 %B to i32
+  invoke void @g(i32 0)
+    to label %unreachable
+    unwind label %catch
+
+catch:
+  %phi = phi i32 [ %X, %bb ], [ %Y, %cont ]
+  %cl = catchpad []
+   to label %doit
+   unwind label %endpad
+
+doit:
+  call void @g(i32 %phi)
+  unreachable
+
+unreachable:
+  unreachable
+
+endpad:
+  catchendpad unwind to caller
+}
+
+
+; CHECK-LABEL: define void @test2(
+; CHECK:  %X = zext i8 %A to i32
+; CHECK:  %Y = zext i8 %B to i32
+; CHECK:  %phi = phi i32 [ %X, %bb ], [ %Y, %cont ]
 
-declare void @g(i8*)
+declare void @g(i32)