1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs
2; RUN: opt -passes=hotcoldsplit -hotcoldsplit-threshold=0 -S < %s | FileCheck %s --check-prefix=REUSE
3; RUN: opt -passes=hotcoldsplit -hotcoldsplit-threshold=0 -S < %s | FileCheck %s --check-prefix=REUSE
4target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
5target triple = "x86_64-apple-macosx10.14.0"
6
7@G = external dso_local global i32, align 4
8
9define void @foo(i32) {
10  %2 = icmp eq i32 %0, 0
11  tail call void @_Z10sideeffectv()
12  br i1 %2, label %sink, label %exit
13
14sink:
15  tail call void @_Z10sideeffectv()
16  call void @llvm.trap()
17  unreachable
18
19exit:
20  ret void
21}
22
23define void @bar(i32) {
24  %2 = icmp eq i32 %0, 0
25  tail call void @_Z10sideeffectv()
26  br i1 %2, label %sink, label %exit
27
28sink:
29  tail call void @_Z10sideeffectv()
30  call void @llvm.trap()
31  unreachable
32
33exit:
34  ret void
35}
36
37declare void @llvm.trap() noreturn cold memory(inaccessiblemem: write)
38declare void @_Z10sideeffectv()
39; REUSE-LABEL: @foo(
40; REUSE-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0
41; REUSE-NEXT:    tail call void @_Z10sideeffectv()
42; REUSE-NEXT:    br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]]
43; REUSE:       codeRepl:
44; REUSE-NEXT:    call void @foo.cold.1() #[[ATTR2:[0-9]+]]
45; REUSE-NEXT:    unreachable
46; REUSE:       exit:
47; REUSE-NEXT:    ret void
48;
49;
50; REUSE-LABEL: @bar(
51; REUSE-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0
52; REUSE-NEXT:    tail call void @_Z10sideeffectv()
53; REUSE-NEXT:    br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]]
54; REUSE:       codeRepl:
55; REUSE-NEXT:    call void @bar.cold.1() #[[ATTR2]]
56; REUSE-NEXT:    unreachable
57; REUSE:       exit:
58; REUSE-NEXT:    ret void
59;
60;
61; REUSE-LABEL: @foo.cold.1(
62; REUSE-NEXT:  newFuncRoot:
63; REUSE-NEXT:    br label [[SINK:%.*]]
64; REUSE:       sink:
65; REUSE-NEXT:    tail call void @_Z10sideeffectv()
66; REUSE-NEXT:    call void @llvm.trap()
67; REUSE-NEXT:    unreachable
68;
69;
70; REUSE-LABEL: @bar.cold.1(
71; REUSE-NEXT:  newFuncRoot:
72; REUSE-NEXT:    br label [[SINK:%.*]]
73; REUSE:       sink:
74; REUSE-NEXT:    tail call void @_Z10sideeffectv()
75; REUSE-NEXT:    call void @llvm.trap()
76; REUSE-NEXT:    unreachable
77;
78