blob: a03e11a2260604e81c992438bf1bb62922223db0 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs --version 6
; RUN: opt -S -passes=mergefunc < %s | FileCheck %s
@llvm.used = appending global [2 x ptr] [ptr @odr_a, ptr @odr_b], section "llvm.metadata"
define internal i32 @basic_a(i32 %x) !prof !12 {
entry:
%add = add nsw i32 %x, 1
ret i32 %add
}
define internal i32 @basic_b(i32 %x) !prof !12 {
entry:
%add = add nsw i32 %x, 1
ret i32 %add
}
define internal i32 @asym_a(i32 %x) !prof !13 {
entry:
%add = add nsw i32 %x, 2
ret i32 %add
}
define internal i32 @asym_b(i32 %x) !prof !14 {
entry:
%add = add nsw i32 %x, 2
ret i32 %add
}
define internal i32 @onesided_a(i32 %x) {
entry:
%add = add nsw i32 %x, 3
ret i32 %add
}
define internal i32 @onesided_b(i32 %x) !prof !15 {
entry:
%add = add nsw i32 %x, 3
ret i32 %add
}
define linkonce_odr i32 @odr_a(i32 %x) !prof !12 {
entry:
%add = add nsw i32 %x, 5
ret i32 %add
}
define linkonce_odr i32 @odr_b(i32 %x) !prof !12 {
entry:
%add = add nsw i32 %x, 5
ret i32 %add
}
define i32 @use_counts(i32 %x) {
entry:
%basic = call i32 @basic_a(i32 %x)
%basic2 = call i32 @basic_b(i32 %x)
%asym = call i32 @asym_a(i32 %x)
%asym2 = call i32 @asym_b(i32 %x)
%onesided = call i32 @onesided_a(i32 %x)
%onesided2 = call i32 @onesided_b(i32 %x)
%odr = call i32 @odr_a(i32 %x)
%odr2 = call i32 @odr_b(i32 %x)
%sum0 = add i32 %basic, %basic2
%sum1 = add i32 %sum0, %asym
%sum2 = add i32 %sum1, %asym2
%sum3 = add i32 %sum2, %onesided
%sum4 = add i32 %sum3, %onesided2
%sum5 = add i32 %sum4, %odr
%sum6 = add i32 %sum5, %odr2
ret i32 %sum6
}
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"ProfileSummary", !1}
!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}
!2 = !{!"ProfileFormat", !"InstrProf"}
!3 = !{!"TotalCount", i64 3531}
!4 = !{!"MaxCount", i64 2000}
!5 = !{!"MaxInternalCount", i64 2000}
!6 = !{!"MaxFunctionCount", i64 2000}
!7 = !{!"NumCounts", i64 12}
!8 = !{!"NumFunctions", i64 12}
!9 = !{!"DetailedSummary", !10}
!10 = !{!11}
!11 = !{i32 10000, i64 1, i32 1}
!12 = !{!"function_entry_count", i64 1}
!13 = !{!"function_entry_count", i64 2000}
!14 = !{!"function_entry_count", i64 1000}
!15 = !{!"function_entry_count", i64 500}
; CHECK-LABEL: define internal i32 @basic_a(
; CHECK-SAME: i32 [[X:%.*]]) !prof [[PROF12:![0-9]+]] {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[X]], 1
; CHECK-NEXT: ret i32 [[ADD]]
;
;
; CHECK-LABEL: define internal i32 @asym_a(
; CHECK-SAME: i32 [[X:%.*]]) !prof [[PROF13:![0-9]+]] {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[X]], 2
; CHECK-NEXT: ret i32 [[ADD]]
;
;
; CHECK-LABEL: define internal i32 @onesided_a(
; CHECK-SAME: i32 [[X:%.*]]) !prof [[PROF14:![0-9]+]] {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[X]], 3
; CHECK-NEXT: ret i32 [[ADD]]
;
;
; CHECK-LABEL: define private i32 @0(
; CHECK-SAME: i32 [[X:%.*]]) !prof [[PROF12]] {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[X]], 5
; CHECK-NEXT: ret i32 [[ADD]]
;
;
; CHECK-LABEL: define i32 @use_counts(
; CHECK-SAME: i32 [[X:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: [[BASIC:%.*]] = call i32 @basic_a(i32 [[X]])
; CHECK-NEXT: [[BASIC2:%.*]] = call i32 @basic_a(i32 [[X]])
; CHECK-NEXT: [[ASYM:%.*]] = call i32 @asym_a(i32 [[X]])
; CHECK-NEXT: [[ASYM2:%.*]] = call i32 @asym_a(i32 [[X]])
; CHECK-NEXT: [[ONESIDED:%.*]] = call i32 @onesided_a(i32 [[X]])
; CHECK-NEXT: [[ONESIDED2:%.*]] = call i32 @onesided_a(i32 [[X]])
; CHECK-NEXT: [[ODR:%.*]] = call i32 @[[GLOB0:[0-9]+]](i32 [[X]])
; CHECK-NEXT: [[ODR2:%.*]] = call i32 @[[GLOB0]](i32 [[X]])
; CHECK-NEXT: [[SUM0:%.*]] = add i32 [[BASIC]], [[BASIC2]]
; CHECK-NEXT: [[SUM1:%.*]] = add i32 [[SUM0]], [[ASYM]]
; CHECK-NEXT: [[SUM2:%.*]] = add i32 [[SUM1]], [[ASYM2]]
; CHECK-NEXT: [[SUM3:%.*]] = add i32 [[SUM2]], [[ONESIDED]]
; CHECK-NEXT: [[SUM4:%.*]] = add i32 [[SUM3]], [[ONESIDED2]]
; CHECK-NEXT: [[SUM5:%.*]] = add i32 [[SUM4]], [[ODR]]
; CHECK-NEXT: [[SUM6:%.*]] = add i32 [[SUM5]], [[ODR2]]
; CHECK-NEXT: ret i32 [[SUM6]]
;
;
; CHECK-LABEL: define linkonce_odr i32 @odr_b(
; CHECK-SAME: i32 [[TMP0:%.*]]) !prof [[PROF15:![0-9]+]] {
; CHECK-NEXT: [[TMP2:%.*]] = tail call i32 @[[GLOB0]](i32 [[TMP0]])
; CHECK-NEXT: ret i32 [[TMP2]]
;
;
; CHECK-LABEL: define linkonce_odr i32 @odr_a(
; CHECK-SAME: i32 [[TMP0:%.*]]) !prof [[PROF15]] {
; CHECK-NEXT: [[TMP2:%.*]] = tail call i32 @[[GLOB0]](i32 [[TMP0]])
; CHECK-NEXT: ret i32 [[TMP2]]
;
;.
; CHECK: [[PROF12]] = !{!"function_entry_count", i64 2}
; CHECK: [[PROF13]] = !{!"function_entry_count", i64 3000}
; CHECK: [[PROF14]] = !{!"function_entry_count", i64 500}
; CHECK: [[PROF15]] = !{!"function_entry_count", i64 1}
;.