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