Skip to content

Commit 863cf8b

Browse files
authored
---
yaml --- r: 341754 b: refs/heads/rxwei-patch-1 c: 3601cc0 h: refs/heads/master
1 parent 61daad1 commit 863cf8b

File tree

590 files changed

+11214
-6520
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

590 files changed

+11214
-6520
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1015,7 +1015,7 @@ refs/tags/swift-DEVELOPMENT-SNAPSHOT-2018-08-18-a: b10b1fce14385faa6d44f6b933e95
10151015
refs/heads/rdar-43033749-fix-batch-mode-no-diags-swift-5.0-branch: a14e64eaad30de89f0f5f0b2a782eed7ecdcb255
10161016
refs/heads/revert-19006-error-bridging-integer-type: 8a9065a3696535305ea53fe9b71f91cbe6702019
10171017
refs/heads/revert-19050-revert-19006-error-bridging-integer-type: ecf752d54b05dd0a20f510f0bfa54a3fec3bcaca
1018-
refs/heads/rxwei-patch-1: 8c8b89c499eaae234bd15a4520547a43c353bacf
1018+
refs/heads/rxwei-patch-1: 3601cc05fbd67212b3dc28d2e03d10ffd1aafedc
10191019
refs/heads/shahmishal-patch-1: e58ec0f7488258d42bef51bc3e6d7b3dc74d7b2a
10201020
refs/heads/typelist-existential: 4046359efd541fb5c72d69a92eefc0a784df8f5e
10211021
refs/tags/swift-4.2-DEVELOPMENT-SNAPSHOT-2018-08-20-a: 4319ba09e4fb8650ee86061075c74a016b6baab9

branches/rxwei-patch-1/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
|**[Debian 9.1 (Raspberry Pi)](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/armv7_debian_stretch.json)** | ARMv7 | [![Build Status](https://ci-external.swift.org/job/oss-swift-RA-linux-debian-9_1/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-RA-linux-debian-9_1)|
1818
|**[Fedora 27](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/x86_64_fedora_27.json)** | x86_64 |[![Build Status](https://ci-external.swift.org/job/oss-swift-RA-linux-fedora-27/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-RA-linux-fedora-27)|
1919
|**[Ubuntu 16.04](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/x86_64_ubuntu_16_04.json)** | x86_64 |[![Build Status](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04)|
20-
|**[Ubuntu 16.04 ](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/ppc64le_ubuntu_16_04.json)** | PPC64LE |[![Build Status](https://ci-external.swift.org/job/oss-swift-4.1-RA-linux-ubuntu-16.04-ppc64le/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-4.1-RA-linux-ubuntu-16.04-ppc64le)|
20+
|**[Ubuntu 16.04 ](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/ppc64le_ubuntu_16_04.json)** | PPC64LE |[![Build Status](https://ci-external.swift.org/job/oss-swift-5.1-RA-linux-ubuntu-16.04-ppc64le/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-5.1-RA-linux-ubuntu-16.04-ppc64le)|
2121
|**[Ubuntu 16.04 ](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/aarch64_ubuntu_16.04.json)** | AArch64 |[![Build Status](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04-aarch64/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04-aarch64)|
2222
|**[Android](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/x86_64_ubuntu_16_04_LTS_android.json)** | ARMv7 |[![Build Status](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04-android/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04-android)|
2323
|**[Android](https://github.com/apple/swift-community-hosted-continuous-integration/blob/master/nodes/x86_64_ubuntu_16_04_LTS_android.json)** | AArch64 |[![Build Status](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04-android-arm64/lastCompletedBuild/badge/icon)](https://ci-external.swift.org/job/oss-swift-RA-linux-ubuntu-16.04-android-arm64)|

branches/rxwei-patch-1/benchmark/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ set(SWIFT_BENCH_MODULES
7878
single-source/DictionaryRemove
7979
single-source/DictionarySubscriptDefault
8080
single-source/DictionarySwap
81+
single-source/Diffing
8182
single-source/DropFirst
8283
single-source/DropLast
8384
single-source/DropWhile
@@ -104,6 +105,7 @@ set(SWIFT_BENCH_MODULES
104105
single-source/Memset
105106
single-source/MonteCarloE
106107
single-source/MonteCarloPi
108+
single-source/Myers
107109
single-source/NSDictionaryCastToSwift
108110
single-source/NSError
109111
single-source/NSStringConversion

branches/rxwei-patch-1/benchmark/single-source/AngryPhonebook.swift

Lines changed: 117 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,60 @@
1313
// This test is based on single-source/Phonebook, with
1414
// to test uppercase and lowercase ASCII string fast paths.
1515
import TestsUtils
16-
import Foundation
1716

18-
public let AngryPhonebook = BenchmarkInfo(
19-
name: "AngryPhonebook",
20-
runFunction: run_AngryPhonebook,
21-
tags: [.validation, .api, .String],
22-
legacyFactor: 7)
17+
let t: [BenchmarkCategory] = [.validation, .api, .String]
18+
19+
public let AngryPhonebook = [
20+
BenchmarkInfo(
21+
name: "AngryPhonebook",
22+
runFunction: run_AngryPhonebook,
23+
tags: t,
24+
legacyFactor: 7),
25+
26+
// Small String Workloads
27+
BenchmarkInfo(
28+
name: "AngryPhonebook.ASCII.Small",
29+
runFunction: { angryPhonebook($0, ascii) },
30+
tags: t,
31+
setUpFunction: { blackHole(ascii) }),
32+
BenchmarkInfo(
33+
name: "AngryPhonebook.Strasse.Small",
34+
runFunction: { angryPhonebook($0, strasse) },
35+
tags: t,
36+
setUpFunction: { blackHole(strasse) }),
37+
BenchmarkInfo(
38+
name: "AngryPhonebook.Armenian.Small",
39+
runFunction: { angryPhonebook($0, armenian) },
40+
tags: t,
41+
setUpFunction: { blackHole(armenian) }),
42+
BenchmarkInfo(
43+
name: "AngryPhonebook.Cyrillic.Small",
44+
runFunction: { angryPhonebook($0, cyrillic) },
45+
tags: t,
46+
setUpFunction: { blackHole(cyrillic) }),
47+
48+
// Regular String Workloads
49+
BenchmarkInfo(
50+
name: "AngryPhonebook.ASCII",
51+
runFunction: { angryPhonebook($0, precomposed: longASCII) },
52+
tags: t,
53+
setUpFunction: { blackHole(longASCII) }),
54+
BenchmarkInfo(
55+
name: "AngryPhonebook.Strasse",
56+
runFunction: { angryPhonebook($0, precomposed: longStrasse) },
57+
tags: t,
58+
setUpFunction: { blackHole(longStrasse) }),
59+
BenchmarkInfo(
60+
name: "AngryPhonebook.Armenian",
61+
runFunction: { angryPhonebook($0, precomposed: longArmenian) },
62+
tags: t,
63+
setUpFunction: { blackHole(longArmenian) }),
64+
BenchmarkInfo(
65+
name: "AngryPhonebook.Cyrillic",
66+
runFunction: { angryPhonebook($0, precomposed: longCyrillic) },
67+
tags: t,
68+
setUpFunction: { blackHole(longCyrillic) })
69+
]
2370

2471
let words = [
2572
"James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph",
@@ -39,3 +86,67 @@ public func run_AngryPhonebook(_ N: Int) {
3986
}
4087
}
4188
}
89+
90+
// Workloads for various scripts. Always 20 names for 400 pairings.
91+
// To keep the performance of various scripts roughly comparable, aim for
92+
// a total length of approximately 120 characters.
93+
// E.g.: `ascii.joined(separator: "").count == 124`
94+
// Every name should fit in 15-bytes UTF-8 encoded, to excercise the small
95+
// string optimization.
96+
// E.g.: `armenian.allSatisfy { $0._guts.isSmall } == true`
97+
98+
// Workload Size Statistics
99+
// SMALL | UTF-8 | UTF-16 | REGULAR | UTF-8 | UTF-16
100+
// ---------|-------|--------|--------------|---------|--------
101+
// ascii | 124 B | 248 B | longASCII | 6158 B | 12316 B
102+
// strasse | 140 B | 240 B | longStrasse | 6798 B | 11996 B
103+
// armenian | 232 B | 232 B | longArmenian | 10478 B | 11676 B
104+
// cyrillic | 238 B | 238 B | longCyrillic | 10718 B | 11916 B
105+
106+
let ascii = Array(words.prefix(20))
107+
// Pathological case, uppercase: ß -> SS
108+
let strasse = Array(repeating: "Straße", count: 20)
109+
110+
let armenian = [
111+
"Արմեն", "Աննա", "Հարութ", "Միքայել", "Մարիա", "Դավիթ", "Վարդան",
112+
"Նարինե", "Տիգրան", "Տաթևիկ", "Թագուհի", "Թամարա", "Ազնաուր", "Գրիգոր",
113+
"Կոմիտաս", "Հայկ", "Գառնիկ", "Վահրամ", "Վահագն", "Գևորգ"]
114+
115+
let cyrillic = [
116+
"Ульяна", "Аркадий", "Аня", "Даниил", "Дмитрий", "Эдуард", "Юрій", "Давид",
117+
"Анна", "Дмитрий", "Евгений", "Борис", "Ксения", "Артур", "Аполлон",
118+
"Соломон", "Николай", "Кристи", "Надежда", "Спартак"]
119+
120+
/// Precompose the phonebook into one large string of comma separated names.
121+
func phonebook(_ names: [String]) -> String {
122+
names.map { firstName in
123+
names.map { lastName in
124+
firstName + " " + lastName
125+
}.joined(separator: ", ")
126+
}.joined(separator: ", ")
127+
}
128+
129+
let longASCII = phonebook(ascii)
130+
let longStrasse = phonebook(strasse)
131+
let longArmenian = phonebook(armenian)
132+
let longCyrillic = phonebook(cyrillic)
133+
134+
@inline(never)
135+
public func angryPhonebook(_ N: Int, _ names: [String]) {
136+
assert(names.count == 20)
137+
// Permute the names.
138+
for _ in 1...N {
139+
for firstname in names {
140+
for lastname in names {
141+
blackHole((firstname.uppercased(), lastname.lowercased()))
142+
}
143+
}
144+
}
145+
}
146+
147+
@inline(never)
148+
public func angryPhonebook(_ N: Int, precomposed names: String) {
149+
for _ in 1...N {
150+
blackHole((names.uppercased(), names.lowercased()))
151+
}
152+
}

branches/rxwei-patch-1/benchmark/single-source/BinaryFloatingPointConversionFromBinaryInteger.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// This test checks performance of generic binary floating-point conversion from
1414
// a binary integer.
1515

16-
import Foundation
1716
import TestsUtils
1817

1918
#if swift(>=4.2)
@@ -110,7 +109,7 @@ extension MockBinaryInteger : BinaryInteger {
110109
var trailingZeroBitCount: Int {
111110
return _value.trailingZeroBitCount
112111
}
113-
112+
114113
func isMultiple(of other: MockBinaryInteger<T>) -> Bool {
115114
return _value.isMultiple(of: other._value)
116115
}
@@ -211,4 +210,3 @@ public func run_BinaryFloatingPointConversionFromBinaryInteger(_ N: Int) {
211210
}
212211

213212
#endif
214-

branches/rxwei-patch-1/benchmark/single-source/BinaryFloatingPointProperties.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
import Foundation
1413
import TestsUtils
1514

1615
public let BinaryFloatingPointPropertiesBinade = BenchmarkInfo(

branches/rxwei-patch-1/benchmark/single-source/BitCount.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// This test checks performance of Swift bit count.
1414
// and mask operator.
1515
// rdar://problem/22151678
16-
import Foundation
1716
import TestsUtils
1817

1918
public let BitCount = BenchmarkInfo(

branches/rxwei-patch-1/benchmark/single-source/BucketSort.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,16 @@
1616
// https://github.com/raywenderlich/swift-algorithm-club/tree/master/Bucket%20Sort
1717
//
1818
// It sorts an array of generic `SortableItem`s. If the type of `sortingAlgo`
19-
// is not known to the call site at line 90, the `sort` method can not be
19+
// is not known to the call site at line 89, the `sort` method can not be
2020
// specialized to integer array sorting, which will lead to a huge performance
2121
// loss. Since `SortingAlgorithm` and `InsertionSort` are declared to be
22-
// `public` and the lines 89-91 can not be inlined in `bucketSort` (due to
22+
// `public` and the lines 88-90 can not be inlined in `bucketSort` (due to
2323
// inlining heuristic limitations), compiler without ExistentialSpecializer
2424
// optimization can not achieve this feat. With ExistentialSpecializer which
2525
// enables generic specialization recursively in a call chain, we're able to
26-
// specialize line 90 for `InsertionSort` on integers.
26+
// specialize line 89 for `InsertionSort` on integers.
2727

2828
import TestsUtils
29-
import Foundation
3029

3130
public let BucketSort = BenchmarkInfo(
3231
name: "BucketSort",
@@ -117,7 +116,8 @@ let items: [Int] = {
117116
let buckets: [Bucket<Int>] = {
118117
let bucketCount = 10
119118
let maxValue = items.max()!.convertToInt()
120-
let maxCapacity = Int(ceil(Double(maxValue + 1) / Double(bucketCount)))
119+
let maxCapacity = Int(
120+
(Double(maxValue + 1) / Double(bucketCount)).rounded(.up))
121121
return (0..<bucketCount).map { _ in Bucket<Int>(capacity: maxCapacity) }
122122
}()
123123

branches/rxwei-patch-1/benchmark/single-source/ByteSwap.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// This test checks performance of Swift byte swap.
1414
// rdar://problem/22151907
1515

16-
import Foundation
1716
import TestsUtils
1817

1918
public let ByteSwap = BenchmarkInfo(

branches/rxwei-patch-1/benchmark/single-source/CString.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import TestsUtils
1414
#if os(Linux)
1515
import Glibc
16+
#elseif os(Windows)
17+
import MSVCRT
1618
#else
1719
import Darwin
1820
#endif

branches/rxwei-patch-1/benchmark/single-source/Calculator.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
import TestsUtils
14-
import Foundation
1514

1615
public let Calculator = BenchmarkInfo(
1716
name: "Calculator",
@@ -53,4 +52,3 @@ public func run_Calculator(_ N: Int) {
5352
}
5453
CheckResults(c == 0)
5554
}
56-
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
//===--- Diffing.swift ----------------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
import TestsUtils
14+
15+
let t: [BenchmarkCategory] = [.api]
16+
public let Diffing = [
17+
BenchmarkInfo(
18+
name: "DiffSame",
19+
runFunction: run_DiffSame,
20+
tags: t,
21+
legacyFactor: 10),
22+
BenchmarkInfo(
23+
name: "DiffPangramToAlphabet",
24+
runFunction: run_DiffPangramToAlphabet,
25+
tags: t,
26+
legacyFactor: 10),
27+
BenchmarkInfo(
28+
name: "DiffPangrams",
29+
runFunction: run_DiffPangrams,
30+
tags: t,
31+
legacyFactor: 10),
32+
BenchmarkInfo(
33+
name: "DiffReversedAlphabets",
34+
runFunction: run_DiffReversedAlphabets,
35+
tags: t,
36+
legacyFactor: 10),
37+
BenchmarkInfo(
38+
name: "DiffReversedLorem",
39+
runFunction: run_DiffReversedLorem,
40+
tags: t,
41+
legacyFactor: 10),
42+
BenchmarkInfo(
43+
name: "DiffDisparate",
44+
runFunction: run_DiffDisparate,
45+
tags: t,
46+
legacyFactor: 10),
47+
BenchmarkInfo(
48+
name: "DiffSimilar",
49+
runFunction: run_DiffSimilar,
50+
tags: t,
51+
legacyFactor: 10),
52+
]
53+
54+
let numbersAndSymbols = Array("0123456789`~!@#$%^&*()+=_-\"'?/<,>.\\{}'")
55+
let alphabets = Array("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
56+
let alphabetsReversed = Array("ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba")
57+
let longPangram = Array("This pangram contains four As, one B, two Cs, one D, thirty Es, six Fs, five Gs, seven Hs, eleven Is, one J, one K, two Ls, two Ms, eighteen Ns, fifteen Os, two Ps, one Q, five Rs, twenty-seven Ss, eighteen Ts, two Us, seven Vs, eight Ws, two Xs, three Ys, & one Z")
58+
let typingPangram = Array("The quick brown fox jumps over the lazy dog")
59+
let loremIpsum = Array("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.")
60+
let unabridgedLorem = Array("Lorem ipsum, quia dolor sit amet consectetur adipisci[ng] velit, sed quia non-numquam [do] eius modi tempora inci[di]dunt, ut labore et dolore magnam aliqua.")
61+
let loremReverse = Array(".auqila angam erolod te erobal tu tnudidicni ropmet domsuie od des ,tile gnicsipida rutetcesnoc ,tema tis rolod muspi meroL")
62+
63+
64+
@inline(never)
65+
public func run_DiffSame(_ N: Int) {
66+
if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) {
67+
for _ in 1...N {
68+
let _ = longPangram.difference(from: longPangram)
69+
}
70+
}
71+
}
72+
73+
@inline(never)
74+
public func run_DiffPangramToAlphabet(_ N: Int) {
75+
if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) {
76+
for _ in 1...N {
77+
let _ = longPangram.difference(from: alphabets)
78+
}
79+
}
80+
}
81+
82+
@inline(never)
83+
public func run_DiffPangrams(_ N: Int) {
84+
if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) {
85+
for _ in 1...N {
86+
let _ = longPangram.difference(from: typingPangram)
87+
}
88+
}
89+
}
90+
91+
@inline(never)
92+
public func run_DiffReversedAlphabets(_ N: Int) {
93+
if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) {
94+
for _ in 1...N {
95+
let _ = alphabets.difference(from: alphabetsReversed)
96+
}
97+
}
98+
}
99+
100+
@inline(never)
101+
public func run_DiffReversedLorem(_ N: Int) {
102+
if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) {
103+
for _ in 1...N {
104+
let _ = loremIpsum.difference(from: loremReverse)
105+
}
106+
}
107+
}
108+
109+
@inline(never)
110+
public func run_DiffDisparate(_ N: Int) {
111+
if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) {
112+
for _ in 1...N {
113+
let _ = alphabets.difference(from: numbersAndSymbols)
114+
}
115+
}
116+
}
117+
118+
@inline(never)
119+
public func run_DiffSimilar(_ N: Int) {
120+
if #available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) {
121+
for _ in 1...N {
122+
let _ = loremIpsum.difference(from: unabridgedLorem)
123+
}
124+
}
125+
}

0 commit comments

Comments
 (0)