1cd1bd6e5SJohannes Doerfert; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
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 Doerfert;.
9cd1bd6e5SJohannes Doerfert; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = external dso_local global i32, align 4
10cd1bd6e5SJohannes Doerfert;.
11cd1bd6e5SJohannes Doerfertdefine void @foo(i32) {
12cd1bd6e5SJohannes Doerfert; CHECK-LABEL: @foo(
13cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0
14cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    tail call void @_Z10sideeffectv()
15cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]]
16cd1bd6e5SJohannes Doerfert; CHECK:       codeRepl:
17cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    call void @foo.cold.1() #[[ATTR2:[0-9]+]]
18cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    ret void
19cd1bd6e5SJohannes Doerfert; CHECK:       exit:
20cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    ret void
21cd1bd6e5SJohannes Doerfert;
22cd1bd6e5SJohannes Doerfert  %2 = icmp eq i32 %0, 0
23cd1bd6e5SJohannes Doerfert  tail call void @_Z10sideeffectv()
24cd1bd6e5SJohannes Doerfert  br i1 %2, label %sink, label %exit
25cd1bd6e5SJohannes Doerfert
26cd1bd6e5SJohannes Doerfertsink:
27cd1bd6e5SJohannes Doerfert  tail call void @_Z10sideeffectv()
28cd1bd6e5SJohannes Doerfert  call void @llvm.trap()
29cd1bd6e5SJohannes Doerfert  unreachable
30cd1bd6e5SJohannes Doerfert
31cd1bd6e5SJohannes Doerfertexit:
32cd1bd6e5SJohannes Doerfert  ret void
33cd1bd6e5SJohannes Doerfert}
34cd1bd6e5SJohannes Doerfert
35cd1bd6e5SJohannes Doerfertdefine void @bar(i32) {
36cd1bd6e5SJohannes Doerfert; CHECK-LABEL: @bar(
37cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0
38cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    tail call void @_Z10sideeffectv()
39cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]]
40cd1bd6e5SJohannes Doerfert; CHECK:       codeRepl:
41cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    call void @bar.cold.1() #[[ATTR2]]
42cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    ret void
43cd1bd6e5SJohannes Doerfert; CHECK:       exit:
44cd1bd6e5SJohannes Doerfert; CHECK-NEXT:    ret void
45cd1bd6e5SJohannes Doerfert;
46cd1bd6e5SJohannes Doerfert  %2 = icmp eq i32 %0, 0
47cd1bd6e5SJohannes Doerfert  tail call void @_Z10sideeffectv()
48cd1bd6e5SJohannes Doerfert  br i1 %2, label %sink, label %exit
49cd1bd6e5SJohannes Doerfert
50cd1bd6e5SJohannes Doerfertsink:
51cd1bd6e5SJohannes Doerfert  tail call void @_Z10sideeffectv()
52cd1bd6e5SJohannes Doerfert  call void @llvm.trap()
53cd1bd6e5SJohannes Doerfert  unreachable
54cd1bd6e5SJohannes Doerfert
55cd1bd6e5SJohannes Doerfertexit:
56cd1bd6e5SJohannes Doerfert  ret void
57cd1bd6e5SJohannes Doerfert}
58cd1bd6e5SJohannes Doerfert
59cd1bd6e5SJohannes Doerfertdeclare void @llvm.trap() noreturn cold
60cd1bd6e5SJohannes Doerfertdeclare void @_Z10sideeffectv()
61cd1bd6e5SJohannes Doerfert;.
62cd1bd6e5SJohannes Doerfert; CHECK: attributes #[[ATTR0:[0-9]+]] = { cold noreturn nounwind }
63cd1bd6e5SJohannes Doerfert; CHECK: attributes #[[ATTR1:[0-9]+]] = { cold minsize noreturn }
64cd1bd6e5SJohannes Doerfert; CHECK: attributes #[[ATTR2]] = { noinline }
65cd1bd6e5SJohannes Doerfert;.
66