[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / Transforms / TailCallElim / deopt-bundle.ll
blobf651e462c1f56c8a187c5d9652c173d59cd71d8d
1 ; RUN: opt < %s -tailcallelim -verify-dom-info -S | FileCheck %s
3 define i32 @f_1(i32 %x) {
4 ; CHECK-LABEL: @f_1(
5 wentry:
6   %cond = icmp ugt i32 %x, 0
7   br i1 %cond, label %return, label %body
9 body:
10 ; CHECK: body:
11 ; CHECK: call i32 @f_1(i32 %y) [ "deopt"() ]
12   %y = add i32 %x, 1
13   %tmp = call i32 @f_1(i32 %y) [ "deopt"() ]
14   ret i32 0
16 return:
17   ret i32 1
20 define i32 @f_2(i32 %x) {
21 ; CHECK-LABEL: @f_2
23 entry:
24   %cond = icmp ugt i32 %x, 0
25   br i1 %cond, label %return, label %body
27 body:
28 ; CHECK: body:
29 ; CHECK: call i32 @f_2(i32 %y) [ "unknown"() ]
30   %y = add i32 %x, 1
31   %tmp = call i32 @f_2(i32 %y) [ "unknown"() ]
32   ret i32 0
34 return:
35   ret i32 1
38 declare void @func()
40 define void @f_3(i1 %B) personality i8 42 {
41 ; CHECK-LABEL: @f_3(
42 entry:
43   invoke void @func()
44           to label %exit unwind label %merge
45 merge:
46   %cs1 = catchswitch within none [label %catch] unwind to caller
48 catch:
49 ; CHECK: catch:
50 ; CHECK: call void @f_3(i1 %B) [ "funclet"(token %cp) ]
51   %cp = catchpad within %cs1 []
52   call void @f_3(i1 %B) [ "funclet"(token %cp) ]
53   ret void
55 exit:
56   ret void