correct suffix matching to search for s/l/t suffixes on
[oota-llvm.git] / test / Transforms / SimplifyCFG / invoke_unwind.ll
index 9f3bd4ee510536b3d2663e8f58914753a1109b9c..bbd779beb489d3f55b0f052e29608a8ef4c6d61e 100644 (file)
@@ -1,14 +1,13 @@
-; This testcase checks to see if the simplifycfg pass is converting invoke
-; instructions to call instructions if the handler just rethrows the exception.
-
-; If this test is successful, the function should be reduced to 'call; ret'
-
-; RUN: opt < %s -simplifycfg -S | \
-; RUN:   not egrep {\\(invoke\\)|\\(br\\)}
+; RUN: opt < %s -simplifycfg -S | FileCheck %s
 
 declare void @bar()
 
-define i32 @test() {
+; This testcase checks to see if the simplifycfg pass is converting invoke
+; instructions to call instructions if the handler just rethrows the exception.
+define i32 @test1() {
+; CHECK: @test1
+; CHECK-NEXT: call void @bar()
+; CHECK-NEXT: ret i32 0
         invoke void @bar( )
                         to label %Ok unwind label %Rethrow
 Ok:             ; preds = %0
@@ -16,3 +15,19 @@ Ok:             ; preds = %0
 Rethrow:                ; preds = %0
         unwind
 }
+
+
+; Verify that simplifycfg isn't duplicating 'unwind' instructions.  Doing this
+; is bad because it discourages commoning.
+define i32 @test2(i1 %c) {
+; CHECK: @test2
+; CHECK: T:
+; CHECK-NEXT: call void @bar()
+; CHECK-NEXT: br label %F
+  br i1 %c, label %T, label %F
+T:
+  call void @bar()
+  br label %F
+F:
+  unwind
+}