1; RUN: opt -passes=synthetic-counts-propagation -S < %s | FileCheck %s 2 3; CHECK-LABEL: define void @foo() 4; CHECK: !prof ![[COUNT1:[0-9]+]] 5define void @foo() { 6 ret void 7} 8 9; CHECK-LABEL: define void @foo_inline() #0 10; CHECK: !prof ![[COUNT2:[0-9]+]] 11define void @foo_inline() #0 { 12 ret void 13} 14 15; CHECK-LABEL: define void @foo_always_inline() #1 16; CHECK: !prof ![[COUNT2]] 17define void @foo_always_inline() #1 { 18 ret void 19} 20 21; CHECK-LABEL: define void @foo_cold() #2 22; CHECK: !prof ![[COUNT3:[0-9]+]] 23define void @foo_cold() #2 { 24 ret void 25} 26 27; CHECK-LABEL: define void @foo_noinline() #3 28; CHECK: !prof ![[COUNT3]] 29define void @foo_noinline() #3 { 30 ret void 31} 32 33; CHECK-LABEL: define internal void @foo_local() 34; CHECK: !prof ![[COUNT4:[0-9]+]] 35define internal void @foo_local() { 36 ret void 37} 38 39; CHECK-LABEL: define internal void @foo_local_escaped() 40; CHECK: !prof ![[COUNT1]] 41define internal void @foo_local_escaped() { 42 ret void 43} 44 45declare void @ext(void ()*) 46 47define void @bar() { 48 call void @ext(void ()* nonnull @foo_local_escaped) 49 ret void 50} 51 52; CHECK-LABEL: define internal void @foo_local_inline() #0 53; CHECK: !prof ![[COUNT2]] 54define internal void @foo_local_inline() #0 { 55 ret void 56} 57 58; CHECK-LABEL: define internal void @foo_local_cold() #2 59; CHECK: !prof ![[COUNT4]] 60define internal void @foo_local_cold() #2 { 61 ret void 62} 63 64; CHECK-LABEL: define linkonce void @foo_linkonce() 65; CHECK: !prof ![[COUNT1]] 66define linkonce void @foo_linkonce() { 67 ret void 68} 69 70; CHECK: ![[COUNT1]] = !{!"synthetic_function_entry_count", i64 10} 71; CHECK: ![[COUNT2]] = !{!"synthetic_function_entry_count", i64 15} 72; CHECK: ![[COUNT3]] = !{!"synthetic_function_entry_count", i64 5} 73; CHECK: ![[COUNT4]] = !{!"synthetic_function_entry_count", i64 0} 74 75attributes #0 = {inlinehint} 76attributes #1 = {alwaysinline} 77attributes #2 = {cold} 78attributes #3 = {noinline} 79 80