[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / Transforms / CodeExtractor / PartialInlineNotViable.ll
blob010d677e5dc82cf403dfbe82770715654319c726
1 ; RUN: opt < %s -partial-inliner -skip-partial-inlining-cost-analysis -S | FileCheck %s
4 define i32 @callee_indr_branch(i32 %v) {
5 entry:
6   %cmp = icmp sgt i32 %v, 2000
7   %addr = select i1 %cmp, i8* blockaddress(@callee_indr_branch, %if.then), i8* blockaddress(@callee_indr_branch, %if.end)
8   indirectbr i8* %addr, [ label %if.then, label %if.end]
10 if.then:                                          ; preds = %entry
11   %mul = mul nsw i32 %v, 10
12   br label %if.then2
14 if.then2:
15   %sub = sub i32 %v, 10
16   br label %if.end
18 if.end:                                           ; preds = %if.then, %entry
19   %v2 = phi i32 [ %v, %entry ], [ %mul, %if.then2 ]
20   %add = add nsw i32 %v2, 200
21   ret i32 %add
24 declare void @use_fp(i8 *)
25 declare void @llvm.localescape(...)
26 declare i8* @llvm.frameaddress(i32)
27 declare i8* @llvm.localrecover(i8*, i8*, i32)
31 define i32 @callee_frameescape(i32 %v) {
32 entry:
33   %a = alloca i32
34   call void (...) @llvm.localescape(i32* %a)
35   %cmp = icmp sgt i32 %v, 2000
36   br i1 %cmp, label %if.then, label %if.end
38 if.then:                                          ; preds = %entry
39   %mul = mul nsw i32 %v, 10
40   br label %if.then2
42 if.then2:
43   %sub = sub i32 %v, 10
44   br label %if.end
46 if.end:                                           ; preds = %if.then, %entry
47   %v2 = phi i32 [ %v, %entry ], [ %mul, %if.then2 ]
48   %add = add nsw i32 %v2, 200
49   ret i32 %add
53 ; CHECK-LABEL: @caller
54 ; CHECK: %r1 = call i32 @callee_indr_branch(i32 %v)
55 ; CHECK-NEXT: %r2 = call i32 @callee_frameescape(i32 %v)
56 define i32 @caller(i32 %v) {
57 entry:
58   %r1 = call i32 @callee_indr_branch(i32 %v)
59   %r2 = call i32 @callee_frameescape(i32 %v)
60   %res = add i32 %r1, %r2
61   ret i32 %res