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