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