1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -profile-generate -Xfrontend -disable-incremental-llvm-codegen -module-name pgo_si_inlinelarge -o %t/main
// This unusual use of 'sh' allows the path of the profraw file to be
// substituted by %target-run.
// RUN: %target-codesign %t/main
// RUN: %target-run sh -c 'env LLVM_PROFILE_FILE=$1 $2' -- %t/default.profraw %t/main
// RUN: %llvm-profdata merge %t/default.profraw -o %t/default.profdata
// RUN: %target-swift-frontend %s -profile-use=%t/default.profdata -emit-sorted-sil -emit-sil -module-name pgo_si_inlinelarge -o - | %FileCheck %s --check-prefix=SIL
// RUN: %target-swift-frontend %s -profile-use=%t/default.profdata -O -emit-sorted-sil -emit-sil -module-name pgo_si_inlinelarge -o - | %FileCheck %s --check-prefix=SIL-OPT
// REQUIRES: profile_runtime
// REQUIRES: executable_test
// REQUIRES: OS=macosx
public func bar(_ x: Int64) -> Int64 {
if (x == 0) {
return 42
}
if (x == 1) {
return 6
}
if (x == 2) {
return 9
}
if (x == 3) {
return 93
}
if (x == 4) {
return 94
}
if (x == 5) {
return 95
}
if (x == 6) {
return 96
}
if (x == 7) {
return 97
}
if (x == 8) {
return 98
}
if (x == 9) {
return 99
}
if (x == 10) {
return 910
}
if (x == 11) {
return 911
}
if (x == 11) {
return 911
}
if (x == 11) {
return 911
}
if (x == 12) {
return 912
}
if (x == 13) {
return 913
}
if (x == 14) {
return 914
}
if (x == 15) {
return 916
}
if (x == 17) {
return 917
}
if (x == 18) {
return 918
}
if (x == 19) {
return 919
}
if (x % 2 == 0) {
return 4242
}
var ret : Int64 = 0
for currNum in stride(from: 5, to: x, by: 5) {
print("in bar stride")
ret += currNum
print(ret)
print("in bar stride")
ret += currNum
print(ret)
print("in bar stride")
ret += currNum
print(ret)
print("in bar stride")
ret += currNum
print(ret)
print("in bar stride")
ret += currNum
print(ret)
print("in bar stride")
ret += currNum
print(ret)
print("in bar stride")
ret += currNum
print(ret)
}
return ret
}
// SIL-LABEL: sil @$s18pgo_si_inlinelarge3fooyys5Int64VF : $@convention(thin) (Int64) -> () !function_entry_count(1) {
// SIL-OPT-LABEL: sil @$s18pgo_si_inlinelarge3fooyys5Int64VF : $@convention(thin) (Int64) -> () !function_entry_count(1) {
public func foo(_ x: Int64) {
// SIL: switch_enum {{.*}} : $Optional<Int64>, case #Optional.some!enumelt: {{.*}} !case_count(100), case #Optional.none!enumelt: {{.*}} !case_count(1)
// SIL: cond_br {{.*}}, {{.*}}, {{.*}} !true_count(50)
// SIL: cond_br {{.*}}, {{.*}}, {{.*}} !true_count(1)
// SIL-OPT: integer_literal $Builtin.Int64, 93
// SIL-OPT: integer_literal $Builtin.Int64, 42
// SIL-OPT: function_ref @$s18pgo_si_inlinelarge3barys5Int64VADF : $@convention(thin) (Int64) -> Int64
var sum : Int64 = 0
for index in 1...x {
if (index % 2 == 0) {
sum += bar(index)
}
if (index == 50) {
sum += bar(index)
}
sum += 1
}
print(sum)
}
// SIL-LABEL: } // end sil function '$s18pgo_si_inlinelarge3fooyys5Int64VF'
// SIL-OPT-LABEL: } // end sil function '$s18pgo_si_inlinelarge3fooyys5Int64VF'
foo(100)
|