1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
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; REUSE-LABEL: @foo(
11; REUSE-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0
12; REUSE-NEXT:    tail call void @_Z10sideeffectv()
13; REUSE-NEXT:    br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]]
14; REUSE:       codeRepl:
15; REUSE-NEXT:    call void @foo.cold.1() #[[ATTR2:[0-9]+]]
16; REUSE-NEXT:    unreachable
17; REUSE:       exit:
18; REUSE-NEXT:    ret void
19;
20  %2 = icmp eq i32 %0, 0
21  tail call void @_Z10sideeffectv()
22  br i1 %2, label %sink, label %exit
23
24sink:
25  tail call void @_Z10sideeffectv()
26  call void @llvm.trap()
27  unreachable
28
29exit:
30  ret void
31}
32
33define void @bar(i32) {
34; REUSE-LABEL: @bar(
35; REUSE-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0
36; REUSE-NEXT:    tail call void @_Z10sideeffectv()
37; REUSE-NEXT:    br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]]
38; REUSE:       codeRepl:
39; REUSE-NEXT:    call void @bar.cold.1() #[[ATTR2]]
40; REUSE-NEXT:    unreachable
41; REUSE:       exit:
42; REUSE-NEXT:    ret void
43;
44  %2 = icmp eq i32 %0, 0
45  tail call void @_Z10sideeffectv()
46  br i1 %2, label %sink, label %exit
47
48sink:
49  tail call void @_Z10sideeffectv()
50  call void @llvm.trap()
51  unreachable
52
53exit:
54  ret void
55}
56
57declare void @llvm.trap() noreturn cold memory(inaccessiblemem: write)
58declare void @_Z10sideeffectv()
59