1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --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;.
40; REUSE: @G = external dso_local global i32, align 4
41;.
42; REUSE-LABEL: @foo(
43; REUSE-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0
44; REUSE-NEXT:    tail call void @_Z10sideeffectv()
45; REUSE-NEXT:    br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]]
46; REUSE:       codeRepl:
47; REUSE-NEXT:    call void @foo.cold.1() #[[ATTR2:[0-9]+]]
48; REUSE-NEXT:    unreachable
49; REUSE:       exit:
50; REUSE-NEXT:    ret void
51;
52;
53; REUSE-LABEL: @bar(
54; REUSE-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0
55; REUSE-NEXT:    tail call void @_Z10sideeffectv()
56; REUSE-NEXT:    br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]]
57; REUSE:       codeRepl:
58; REUSE-NEXT:    call void @bar.cold.1() #[[ATTR2]]
59; REUSE-NEXT:    unreachable
60; REUSE:       exit:
61; REUSE-NEXT:    ret void
62;
63;
64; REUSE-LABEL: @foo.cold.1(
65; REUSE-NEXT:  newFuncRoot:
66; REUSE-NEXT:    br label [[SINK:%.*]]
67; REUSE:       sink:
68; REUSE-NEXT:    tail call void @_Z10sideeffectv()
69; REUSE-NEXT:    call void @llvm.trap()
70; REUSE-NEXT:    unreachable
71;
72;
73; REUSE-LABEL: @bar.cold.1(
74; REUSE-NEXT:  newFuncRoot:
75; REUSE-NEXT:    br label [[SINK:%.*]]
76; REUSE:       sink:
77; REUSE-NEXT:    tail call void @_Z10sideeffectv()
78; REUSE-NEXT:    call void @llvm.trap()
79; REUSE-NEXT:    unreachable
80;
81;.
82; REUSE: attributes #[[ATTR0:[0-9]+]] = { cold noreturn nounwind memory(inaccessiblemem: write) }
83; REUSE: attributes #[[ATTR1:[0-9]+]] = { cold minsize noreturn }
84; REUSE: attributes #[[ATTR2]] = { noinline }
85;.
86