Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SE-0206][stdlib] Implement Hashable Enhancements proposal #16073

Merged
merged 13 commits into from
Apr 24, 2018

Conversation

lorentey
Copy link
Member

@lorentey lorentey commented Apr 20, 2018

This PR implements the changes proposed in SE-0206, "Hashable Enhancements".

  • Makes the Hasher type and Hashable's new hash(into:) requirement public
  • Extends compiler support for deriving Hashable with new cases, as described below.

This is fully source compatible with existing code. Code can choose to implement either Hashable requirement; the other requirement is then automatically synthesized by the compiler.

rdar://problem/35052153

Conforming to Hashable by implementing hashValue

Code written for previous versions of Swift conforms to Hashable by implementing hashValue. This will keep working after this PR, with no source-level changes:

struct OldFashionedPoint: Hashable {
  let x: Int
  let y: Int
  var hashValue: Int {
    return x.hashValue ^ y.hashValue &* 16777619
  }
}

To make this work, the compiler synthesizes the missing hash(into:) requirement automatically:

  @derived func hash(into hasher: inout Hasher) {
    hasher.combine(self.hashValue)
  }

This partial synthesis is new with this PR. It works for all types that can implement Hashable: enums, structs and classes, with no restrictions. (Deriving class members is now safe, thanks to @slavapestov's work in #16057.)

Conforming to Hashable by implementing hash(into:)

I hope code written for 4.2+ will prefer to implement the hash(into:) requirement instead:

struct ModernPoint: Hashable {
  let x: Int
  let y: Int
  func hash(into hasher: inout Hasher) {
    hasher.combine(x)
    hasher.combine(y)
  }
}

In this case the compiler will automatically provide the missing hashValue requirement, with the following implementation:

  @derived var hashValue: Int {
    var hasher = Hasher()
    self.hash(into: &hasher)
    return hasher.finalize()
  }

Like the previous case, this kind of hashValue synthesis works for all types, with no restrictions.

Conforming to Hashable by automatic synthesis

Since SE-0185, it has been possible to have the compiler supply the entire Hashable conformance for structs and enums whose components are all Hashable. For example:

struct Point: Hashable {
  let x: Int
  let y: Int
}

This will keep working after this PR, except the compiler now implements this conformance as follows:

  @derived func hash(into hasher: inout Hasher) {
    hasher.combine(x)
    hasher.combine(y)
  }
  @derived var hashValue: Int { // Same as above
    var hasher = Hasher()
    self.hash(into: &hasher)
    return hasher.finalize()
  }

Enums work, too:

enum Shape: Hashable {
  case point
  case circle(radius: Int)
  case rectangle(width: Int, height: Int)

  @derived func hash(into hasher: inout Hasher) {
    switch self {
    case .point:
      hasher.combine(0)
    case .circle(radius: let radius):
      hasher.combine(1)
      hasher.combine(radius)
    case .rectangle(width: let width, height: let height):
      hasher.combine(2)
      hasher.combine(width)
      hasher.combine(height)
    }
  }
  @derived var hashValue: Int {
    var hasher = Hasher()
    self.hash(into: &hasher)
    return hasher.finalize()
  }
}

(In the examples above, the compiler also synthesizes Equatable conformance.)

@lorentey lorentey added the swift evolution approved Flag → feature: A feature that was approved through the Swift evolution process label Apr 20, 2018
@lorentey
Copy link
Member Author

cc @natecook1000

@lorentey
Copy link
Member Author

@swift-ci smoke test

@effects(releasenone)
public mutating func combine(bytes: UnsafeRawBufferPointer) {
_core.combine(bytes: bytes)
}

/// Finalize the hasher state and return the hash value.
/// Finalizing invalidates the hasher; additional bits cannot be combined
/// into it, and it cannot be finalized again.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the final semantics for finalize()? I didn't totally understand the description in the acceptance notice.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, it isn't! I have to change it to be nonmutating but consuming. I don't think we need to change the name to finalized() because of the consuming semantics. @jckarter, do you agree?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We didn't discuss changing the name. The discussion about the hasher being invalidated may still not be necessary anymore since the consuming means you can't use the finalized value anymore anyway.

@lorentey
Copy link
Member Author

OK, we now have a consuming finalize. I also made non-public declarations @usableFromInline internal; this still allows white-box testing with -disable-access-control, but it makes them much trickier to access from user code.

@lorentey
Copy link
Member Author

@swift-ci please test

@swiftlang swiftlang deleted a comment from swift-ci Apr 21, 2018
@swiftlang swiftlang deleted a comment from swift-ci Apr 21, 2018
/// Finalize the hasher state and return the hash value. Finalizing consumes
/// the hasher, forbidding further operations.
@effects(releasenone)
public __consuming func finalize() -> Int {
Copy link
Member Author

@lorentey lorentey Apr 22, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jckarter, @natecook1000 A later commit changes it to read "Finalizing consumes the hasher, forbidding further operations", which is technically kind of true, but it's not the whole story. How about this?

public struct Hasher {
  ...
  /// Finalize the hasher state and return the hash value.
  ///
  /// Finalizing consumes the hasher: it is illegal to finalize a hasher you
  /// don't own, or to perform operations on a finalized hasher. (These
  /// may become compile-time errors in the future.)
  @effects(releasenone)
  public __consuming func finalize() -> Int {...}
}
...
public protocol Hashable {
  ...
  /// Hash the essential components of this value into the hash function
  /// represented by `hasher`, by feeding them into it using its `combine`
  /// methods.
  ///
  /// Essential components are precisely those that are compared in the type's
  /// implementation of `Equatable`.
  ///
  /// Note that `hash(into:)` doesn't own the hasher passed into it, so it must not
  /// call `finalize()` on it. Doing so may become a compile-time error in the future.
  func hash(into hasher: inout Hasher)
}

@lorentey
Copy link
Member Author

I'll have to quickly rebase this to incorporate the new StdlibUnittest functionality from #16066.

Then I'll cherry-pick & update commits from #15122 so this PR will implement the whole of SE-0206, including de-underscoring hash(into:) and extending compiler synthesis.

@lorentey lorentey changed the title [SE-0206][stdlib] Make Hasher public [SE-0206][stdlib] Implement Hashable Enhancements proposal Apr 23, 2018
@lorentey
Copy link
Member Author

@swift-ci please smoke test

@lorentey
Copy link
Member Author

@swift-ci please test

@lorentey
Copy link
Member Author

@swift-ci please test source compatibility

@lorentey
Copy link
Member Author

@swift-ci please test source compatibility

@lorentey
Copy link
Member Author

cc @slavapestov 356e595a86c3528ccefdb2da965dc1153b2350ad and ad1255b24191b22f2a0b67df8b4ca8c1c1f21638 implement synthesis for the new Hashable.

Adding Hashable in finalizeType() fixed the vtable issue with synthesized class methods; thank you!

@@ -17,6 +17,9 @@ extension _CFObject {
public var hashValue: Int {
return Int(bitPattern: CFHash(self))
}
public func hash(into hasher: inout Hasher) {
hasher.combine(self.hashValue)
}
Copy link
Contributor

@lancep lancep Apr 24, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need this since the compiler auto-synthesizes it?

Copy link
Member Author

@lorentey lorentey Apr 24, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CF types are magically auto-conformed to the _CFObject protocol, and synthesis doesn't work for them. Luckily this is an extremely special case that (as far as I know) only applies to this particular protocol. (It definitely doesn't affect any user code.) cc @jrose-apple

As noted in the proposal’s revision, this allows us to get rid of finalization checks, improves API robustness, and paves the way for making Hasher move-only in the future.
Newly internal declarations include Hasher._seed and the integer overloads of Hasher._combine(_:), as well as _SipHash13 and _SipHash24.

Unify the interfaces of these SipHash testing structs with Hasher. Update SipHash test to cover Hasher, too.

Add @usableFromInline to all newly internal stuff. In addition to its normal use, it also enables white box testing; compile tests that need to use these declarations with -disable-access-control.
This removes the default implementation of hash(into:), and replaces it with automatic synthesis built into the compiler. Hashable can now be implemented by defining either hashValue or hash(into:) -- the compiler supplies the missing half automatically, in all cases.

To determine which hash(into:) implementation to generate, the synthesizer resolves hashValue -- if it finds a synthesized definition for it, then the generated hash(into:) body implements hashing from scratch, feeding components into the hasher. Otherwise, the body implements hash(into:) in terms of hashValue.
…or _hash(into:)

Without this change, the Hashable synthesizer attempts to add hash(into:) methods directly on CF types, which (somewhat unsurprisingly) fails with assertion below. (This situation is unique to CF types, which are imported with an implicit _CFObject conformance; we usually have an extension context or a non-imported type decl in which to put the derived methods.)

Assertion failed: (!decl->isForeign() && "Use getForeignMetadataLayout()"), function getClassMetadataLayout, file /Users/klorentey/Swift/swift/lib/IRGen/MetadataLayout.cpp, line 83.
0  swift                    0x000000010ccd29c8 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
1  swift                    0x000000010ccd30d6 SignalHandler(int) + 694
2  libsystem_platform.dylib 0x00007fff600e0d9a _sigtramp + 26
3  swift                    0x000000010e04f1ed cmark_strbuf__initbuf + 122440
4  libsystem_c.dylib        0x00007fff5ffa6f79 abort + 127
5  libsystem_c.dylib        0x00007fff5ff6f090 basename_r + 0
6  swift                    0x00000001096e8f95 swift::irgen::IRGenModule::getClassMetadataLayout(swift::ClassDecl*) + 53
7  swift                    0x00000001095b9e25 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>) + 133
8  swift                    0x00000001095ba252 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>, bool) + 690
9  swift                    0x00000001096bef49 swift::SILInstructionVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::SILInstruction*) + 33497
10 swift                    0x00000001096b3067 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8055
11 swift                    0x00000001095c8d8b swift::irgen::IRGenerator::emitLazyDefinitions() + 1051
12 swift                    0x000000010968eb16 performIRGeneration(swift::IRGenOptions&, swift::ModuleDecl*, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule> >, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::LLVMContext&, swift::SourceFile*, llvm::GlobalVariable**, unsigned int) + 1382
13 swift                    0x000000010968f05e swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule> >, llvm::StringRef, swift::PrimarySpecificPaths const&, llvm::LLVMContext&, unsigned int, llvm::GlobalVariable**) + 94
14 swift                    0x000000010952cfc0 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) + 15488
15 swift                    0x0000000109528332 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2962
16 swift                    0x00000001094e4848 main + 2328
17 libdyld.dylib            0x00007fff5feecc41 start + 1
Stack dump:
[…]
1.	While emitting IR SIL function "@$SSo10CGColorRefas8HashableSCsACP4hash4intoys6HasherVz_tFTW".
 for 'hash(into:)' in module 'CoreGraphics'
hash(into:) needs to be included in expectations; tests looking at synthesized Hashable implementation bodies need to be updated for resilient hashing.
…iated values

For enums with no associated values, it is better to move the hasher.combine call out of the switch statement, like this:

func hash(into hasher: inout Hasher) {
  let discriminator: Int
  switch self {
    case a: discriminator = 0
    case b: discriminator = 1
    case c: discriminator = 2
  }
  hasher.combine(discriminator)
}

This enables the optimizer to replace the switch statement with a simple integer promotion, restoring earlier behavior.
@lorentey
Copy link
Member Author

@swift-ci test source compatibility

@lorentey
Copy link
Member Author

@swift-ci smoke test compiler performance

@lorentey
Copy link
Member Author

@swift-ci benchmark

@lorentey
Copy link
Member Author

@swift-ci test

@swift-ci
Copy link
Contributor

Build comment file:

Summary for master smoketest

Unexpected test results, excluded stats for ReactiveCocoa

Regressions found (see below)

Debug

debug brief

Regressed (1)
name old new delta delta_pct
time.swift-driver.wall 68.2s 70.1s 1.8s 2.71% ⛔
Improved (0)
name old new delta delta_pct
Unchanged (delta < 1.0% or delta < 100.0ms) (1)
name old new delta delta_pct
LLVM.NumLLVMBytesOutput 40,995,524 41,036,038 40,514 0.1%

debug detailed

Regressed (0)
name old new delta delta_pct
Improved (0)
name old new delta delta_pct
Unchanged (delta < 1.0% or delta < 100.0ms) (23)
name old new delta delta_pct
AST.NumImportedExternalDefinitions 91,038 91,038 0 0.0%
AST.NumLoadedModules 12,956 12,956 0 0.0%
AST.NumTotalClangImportedEntities 259,146 259,146 0 0.0%
AST.NumUsedConformances 8,719 8,768 49 0.56%
IRModule.NumIRBasicBlocks 125,960 126,016 56 0.04%
IRModule.NumIRFunctions 74,249 74,367 118 0.16%
IRModule.NumIRGlobals 68,094 68,174 80 0.12%
IRModule.NumIRInsts 1,403,229 1,404,891 1,662 0.12%
IRModule.NumIRValueSymbols 127,181 127,379 198 0.16%
LLVM.NumLLVMBytesOutput 40,995,524 41,036,038 40,514 0.1%
SILModule.NumSILGenFunctions 43,307 43,427 120 0.28%
SILModule.NumSILOptFunctions 46,847 47,002 155 0.33%
Sema.NumConformancesDeserialized 334,468 334,011 -457 -0.14%
Sema.NumConstraintScopes 906,634 906,835 201 0.02%
Sema.NumDeclsDeserialized 2,238,146 2,238,669 523 0.02%
Sema.NumDeclsValidated 158,807 158,876 69 0.04%
Sema.NumFunctionsTypechecked 52,252 52,321 69 0.13%
Sema.NumGenericSignatureBuilders 61,124 61,117 -7 -0.01%
Sema.NumLazyGenericEnvironments 453,912 453,216 -696 -0.15%
Sema.NumLazyGenericEnvironmentsLoaded 40,672 40,555 -117 -0.29%
Sema.NumLazyIterableDeclContexts 343,563 342,807 -756 -0.22%
Sema.NumTypesDeserialized 2,355,161 2,357,432 2,271 0.1%
Sema.NumTypesValidated 219,794 219,794 0 0.0%

Release

release brief

Regressed (0)
name old new delta delta_pct
Improved (0)
name old new delta delta_pct
Unchanged (delta < 1.0% or delta < 100.0ms) (2)
name old new delta delta_pct
LLVM.NumLLVMBytesOutput 30,572,604 30,636,572 63,968 0.21%
time.swift-driver.wall 164.7s 164.8s 136.1ms 0.08%

release detailed

Regressed (0)
name old new delta delta_pct
Improved (0)
name old new delta delta_pct
Unchanged (delta < 1.0% or delta < 100.0ms) (23)
name old new delta delta_pct
AST.NumImportedExternalDefinitions 8,764 8,764 0 0.0%
AST.NumLoadedModules 406 406 0 0.0%
AST.NumTotalClangImportedEntities 25,382 25,382 0 0.0%
AST.NumUsedConformances 8,724 8,774 50 0.57%
IRModule.NumIRBasicBlocks 174,974 175,039 65 0.04%
IRModule.NumIRFunctions 57,318 57,464 146 0.25%
IRModule.NumIRGlobals 55,495 55,483 -12 -0.02%
IRModule.NumIRInsts 1,394,523 1,397,328 2,805 0.2%
IRModule.NumIRValueSymbols 101,470 101,604 134 0.13%
LLVM.NumLLVMBytesOutput 30,572,604 30,636,572 63,968 0.21%
SILModule.NumSILGenFunctions 21,975 22,052 77 0.35%
SILModule.NumSILOptFunctions 38,688 38,759 71 0.18%
Sema.NumConformancesDeserialized 152,063 152,071 8 0.01%
Sema.NumConstraintScopes 800,856 801,057 201 0.03%
Sema.NumDeclsDeserialized 226,697 226,963 266 0.12%
Sema.NumDeclsValidated 28,507 28,576 69 0.24%
Sema.NumFunctionsTypechecked 10,626 10,695 69 0.65%
Sema.NumGenericSignatureBuilders 6,467 6,462 -5 -0.08%
Sema.NumLazyGenericEnvironments 33,657 33,635 -22 -0.07%
Sema.NumLazyGenericEnvironmentsLoaded 4,544 4,549 5 0.11%
Sema.NumLazyIterableDeclContexts 21,397 21,382 -15 -0.07%
Sema.NumTypesDeserialized 278,667 278,874 207 0.07%
Sema.NumTypesValidated 40,441 40,441 0 0.0%

Copy link
Member

@milseman milseman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, though you'll want to loop in someone to review the code synthesis part.

@swift-ci
Copy link
Contributor

Build comment file:

Optimized (O)

Regression (16)
TEST OLD NEW DELTA SPEEDUP
ChainedFilterMap 1246 1408 +13.0% 0.88x
Chars 1093 1215 +11.2% 0.90x
CharIndexing_tweet_unicodeScalars 31257 33843 +8.3% 0.92x
CharIndexing_chinese_unicodeScalars 12221 13140 +7.5% 0.93x (?)
CharIndexing_japanese_unicodeScalars 19324 20777 +7.5% 0.93x (?)
CharIndexing_korean_unicodeScalars 15658 16829 +7.5% 0.93x
CharIndexing_russian_unicodeScalars 13453 14454 +7.4% 0.93x (?)
CharIndexing_ascii_unicodeScalars 16158 17351 +7.4% 0.93x
CharIndexing_punctuated_unicodeScalars 3655 3922 +7.3% 0.93x
CharIndexing_punctuatedJapanese_unicodeScalars 2934 3134 +6.8% 0.94x
CharIteration_russian_unicodeScalars 17008 18027 +6.0% 0.94x
CharIteration_chinese_unicodeScalars 15463 16357 +5.8% 0.95x
CharIteration_japanese_unicodeScalars 24490 25894 +5.7% 0.95x
CharIteration_korean_unicodeScalars 19860 20979 +5.6% 0.95x
CharIteration_ascii_unicodeScalars 20513 21657 +5.6% 0.95x
SumUsingReduceInto 92 97 +5.4% 0.95x
Improvement (30)
TEST OLD NEW DELTA SPEEDUP
Dictionary4 880 349 -60.3% 2.52x
Dictionary4OfObjects 1005 525 -47.8% 1.91x
Sim2DArray 669 416 -37.8% 1.61x
BinaryFloatingPointPropertiesBinade 31 25 -19.4% 1.24x
SetIntersect_OfObjects 2556 2246 -12.1% 1.14x
StringBuilderLong 1393 1241 -10.9% 1.12x (?)
ReversedDictionary 388 352 -9.3% 1.10x
DictionaryBridge 1249 1138 -8.9% 1.10x (?)
PointerArithmetics 34365 31496 -8.3% 1.09x
SuffixCountableRange 12 11 -8.3% 1.09x
SuffixCountableRangeLazy 12 11 -8.3% 1.09x
DropLastCountableRangeLazy 12 11 -8.3% 1.09x
EqualStringSubstring 55 51 -7.3% 1.08x (?)
OpenClose 287 267 -7.0% 1.07x
ObjectiveCBridgeFromNSDictionaryAnyObject 114618 107095 -6.6% 1.07x (?)
SetIntersect 1041 973 -6.5% 1.07x
SetUnion 5791 5424 -6.3% 1.07x
StringComparison_fastPrenormal 829 779 -6.0% 1.06x
StringMatch 11633 10940 -6.0% 1.06x
StringWordBuilderReservingCapacity 2004 1891 -5.6% 1.06x
SetIsSubsetOf_OfObjects 570 538 -5.6% 1.06x
BinaryFloatingPointPropertiesUlp 37 35 -5.4% 1.06x
FatCompactMap 215926 204445 -5.3% 1.06x
DictionarySwapAt 7276 6901 -5.2% 1.05x (?)
StringWithCString 43027 40847 -5.1% 1.05x
SetExclusiveOr 6734 6396 -5.0% 1.05x
CStringLongAscii 4886 4641 -5.0% 1.05x
FrequenciesUsingReduceInto 1876 1782 -5.0% 1.05x
CharacterPropertiesPrecomputed 1296 1233 -4.9% 1.05x
WordSplitUTF16 10854 10335 -4.8% 1.05x (?)
No Changes (376)
TEST OLD NEW DELTA SPEEDUP
AngryPhonebook 3880 3939 +1.5% 0.99x (?)
AnyHashableWithAClass 84884 84624 -0.3% 1.00x (?)
Array2D 2532 2547 +0.6% 0.99x (?)
ArrayAppend 1081 1105 +2.2% 0.98x
ArrayAppendArrayOfInt 793 797 +0.5% 0.99x (?)
ArrayAppendAscii 13936 13825 -0.8% 1.01x (?)
ArrayAppendFromGeneric 798 796 -0.3% 1.00x (?)
ArrayAppendGenericStructs 1400 1419 +1.4% 0.99x (?)
ArrayAppendLatin1 41167 40410 -1.8% 1.02x
ArrayAppendLazyMap 1341 1341 +0.0% 1.00x
ArrayAppendOptionals 1404 1426 +1.6% 0.98x (?)
ArrayAppendRepeatCol 1339 1339 +0.0% 1.00x
ArrayAppendReserved 813 840 +3.3% 0.97x
ArrayAppendSequence 1120 1120 +0.0% 1.00x
ArrayAppendStrings 6332 6246 -1.4% 1.01x
ArrayAppendToFromGeneric 793 798 +0.6% 0.99x (?)
ArrayAppendToGeneric 798 797 -0.1% 1.00x (?)
ArrayAppendUTF16 42319 40320 -4.7% 1.05x
ArrayInClass 85 85 +0.0% 1.00x
ArrayLiteral 0 0 +0.0% 1.00x
ArrayOfGenericPOD2 148 148 +0.0% 1.00x
ArrayOfGenericRef 4395 4396 +0.0% 1.00x (?)
ArrayOfPOD 183 183 +0.0% 1.00x
ArrayOfRef 4349 4355 +0.1% 1.00x (?)
ArrayPlusEqualArrayOfInt 795 784 -1.4% 1.01x (?)
ArrayPlusEqualFiveElementCollection 5421 5506 +1.6% 0.98x
ArrayPlusEqualSingleElementCollection 1080 1100 +1.9% 0.98x (?)
ArrayPlusEqualThreeElements 1660 1656 -0.2% 1.00x (?)
ArraySubscript 1526 1526 +0.0% 1.00x
ArrayValueProp 8 8 +0.0% 1.00x
ArrayValueProp2 8 8 +0.0% 1.00x
ArrayValueProp3 8 8 +0.0% 1.00x
ArrayValueProp4 8 8 +0.0% 1.00x
BinaryFloatingPointPropertiesNextUp 28 28 +0.0% 1.00x
BitCount 211 202 -4.3% 1.04x
ByteSwap 103 100 -2.9% 1.03x (?)
COWTree 5342 5351 +0.2% 1.00x (?)
CSVParsing 710019 707086 -0.4% 1.00x (?)
CSVParsingAlt 773788 777018 +0.4% 1.00x (?)
CSVParsingAltIndices 340202 340230 +0.0% 1.00x (?)
CStringLongNonAscii 2208 2249 +1.9% 0.98x
CStringShortAscii 3168 3144 -0.8% 1.01x (?)
Calculator 1129 1097 -2.8% 1.03x
CaptureProp 4073 4099 +0.6% 0.99x (?)
CharIndexing_ascii_unicodeScalars_Backwards 16238 16361 +0.8% 0.99x (?)
CharIndexing_chinese_unicodeScalars_Backwards 12288 12388 +0.8% 0.99x (?)
CharIndexing_japanese_unicodeScalars_Backwards 19445 19579 +0.7% 0.99x (?)
CharIndexing_korean_unicodeScalars_Backwards 15739 15856 +0.7% 0.99x (?)
CharIndexing_punctuatedJapanese_unicodeScalars_Backwards 2936 2962 +0.9% 0.99x (?)
CharIndexing_punctuated_unicodeScalars_Backwards 3674 3710 +1.0% 0.99x
CharIndexing_russian_unicodeScalars_Backwards 13504 13627 +0.9% 0.99x (?)
CharIndexing_tweet_unicodeScalars_Backwards 32013 32281 +0.8% 0.99x (?)
CharIndexing_utf16_unicodeScalars 22684 23083 +1.8% 0.98x (?)
CharIndexing_utf16_unicodeScalars_Backwards 23305 23352 +0.2% 1.00x (?)
CharIteration_ascii_unicodeScalars_Backwards 15228 15106 -0.8% 1.01x
CharIteration_chinese_unicodeScalars_Backwards 11523 11435 -0.8% 1.01x
CharIteration_japanese_unicodeScalars_Backwards 18220 18087 -0.7% 1.01x (?)
CharIteration_korean_unicodeScalars_Backwards 14764 14643 -0.8% 1.01x
CharIteration_punctuatedJapanese_unicodeScalars 3663 3849 +5.1% 0.95x
CharIteration_punctuatedJapanese_unicodeScalars_Backwards 2760 2734 -0.9% 1.01x
CharIteration_punctuated_unicodeScalars 4597 4836 +5.2% 0.95x
CharIteration_punctuated_unicodeScalars_Backwards 3451 3421 -0.9% 1.01x (?)
CharIteration_russian_unicodeScalars_Backwards 12683 12581 -0.8% 1.01x
CharIteration_tweet_unicodeScalars 40622 42757 +5.3% 0.95x
CharIteration_tweet_unicodeScalars_Backwards 30023 29834 -0.6% 1.01x
CharIteration_utf16_unicodeScalars 27722 27937 +0.8% 0.99x
CharIteration_utf16_unicodeScalars_Backwards 18773 18559 -1.1% 1.01x (?)
CharacterLiteralsLarge 5907 5861 -0.8% 1.01x (?)
CharacterLiteralsSmall 220 217 -1.4% 1.01x
CharacterPropertiesFetch 4535 4520 -0.3% 1.00x (?)
CharacterPropertiesStashed 1460 1447 -0.9% 1.01x (?)
CharacterPropertiesStashedMemo 1707 1677 -1.8% 1.02x (?)
ClassArrayGetter 15 15 +0.0% 1.00x
Combos 486 487 +0.2% 1.00x (?)
DataAccessBytes 1221 1226 +0.4% 1.00x (?)
DataAppendArray 6282 6156 -2.0% 1.02x (?)
DataAppendBytes 6080 5962 -1.9% 1.02x (?)
DataAppendDataLargeToLarge 69256 68964 -0.4% 1.00x (?)
DataAppendDataLargeToMedium 36554 36278 -0.8% 1.01x (?)
DataAppendDataLargeToSmall 35246 35191 -0.2% 1.00x (?)
DataAppendDataMediumToLarge 39007 38524 -1.2% 1.01x (?)
DataAppendDataMediumToMedium 7857 7718 -1.8% 1.02x (?)
DataAppendDataMediumToSmall 6939 6920 -0.3% 1.00x (?)
DataAppendDataSmallToLarge 37989 37075 -2.4% 1.02x (?)
DataAppendDataSmallToMedium 7373 7127 -3.3% 1.03x (?)
DataAppendDataSmallToSmall 6751 6638 -1.7% 1.02x (?)
DataAppendSequence 19202 19552 +1.8% 0.98x (?)
DataCopyBytes 2628 2506 -4.6% 1.05x
DataCount 37 38 +2.7% 0.97x
DataMutateBytes 4309 4315 +0.1% 1.00x (?)
DataReplaceLarge 40992 42566 +3.8% 0.96x (?)
DataReplaceLargeBuffer 58346 58428 +0.1% 1.00x (?)
DataReplaceMedium 11437 11872 +3.8% 0.96x (?)
DataReplaceMediumBuffer 12522 12709 +1.5% 0.99x (?)
DataReplaceSmall 8985 8963 -0.2% 1.00x (?)
DataReplaceSmallBuffer 9495 9411 -0.9% 1.01x (?)
DataReset 3183 3174 -0.3% 1.00x (?)
DataSetCount 902 879 -2.5% 1.03x
DataSubscript 240 237 -1.2% 1.01x
DictOfArraysToArrayOfDicts 814 812 -0.2% 1.00x (?)
Dictionary 740 725 -2.0% 1.02x (?)
Dictionary2 878 869 -1.0% 1.01x (?)
Dictionary2OfObjects 2415 2380 -1.4% 1.01x (?)
Dictionary3 306 297 -2.9% 1.03x
Dictionary3OfObjects 841 825 -1.9% 1.02x (?)
DictionaryCopy 125918 122670 -2.6% 1.03x
DictionaryFilter 126264 123772 -2.0% 1.02x
DictionaryGroup 278 281 +1.1% 0.99x (?)
DictionaryGroupOfObjects 2355 2287 -2.9% 1.03x (?)
DictionaryLiteral 2133 2123 -0.5% 1.00x (?)
DictionaryOfObjects 2620 2585 -1.3% 1.01x (?)
DictionaryRemove 5462 5391 -1.3% 1.01x (?)
DictionaryRemoveOfObjects 29834 28800 -3.5% 1.04x
DictionarySubscriptDefaultMutation 344 340 -1.2% 1.01x (?)
DictionarySubscriptDefaultMutationArray 708 701 -1.0% 1.01x (?)
DictionarySubscriptDefaultMutationArrayOfObjects 4230 4204 -0.6% 1.01x (?)
DictionarySubscriptDefaultMutationOfObjects 1943 1908 -1.8% 1.02x (?)
DictionarySwap 1506 1491 -1.0% 1.01x
DictionarySwapAtOfObjects 52957 52517 -0.8% 1.01x (?)
DictionarySwapOfObjects 9839 9538 -3.1% 1.03x (?)
DoubleWidthDivision 0 0 +0.0% 1.00x
DropFirstAnyCollection 83 84 +1.2% 0.99x
DropFirstAnyCollectionLazy 62520 62532 +0.0% 1.00x (?)
DropFirstAnySeqCRangeIter 21546 21821 +1.3% 0.99x (?)
DropFirstAnySeqCRangeIterLazy 21555 21797 +1.1% 0.99x
DropFirstAnySeqCntRange 41 41 +0.0% 1.00x
DropFirstAnySeqCntRangeLazy 41 41 +0.0% 1.00x
DropFirstAnySequence 4974 5017 +0.9% 0.99x (?)
DropFirstAnySequenceLazy 4975 5025 +1.0% 0.99x (?)
DropFirstArray 35 35 +0.0% 1.00x
DropFirstArrayLazy 35 35 +0.0% 1.00x
DropFirstCountableRange 35 35 +0.0% 1.00x
DropFirstCountableRangeLazy 35 35 +0.0% 1.00x
DropFirstSequence 2680 2681 +0.0% 1.00x (?)
DropFirstSequenceLazy 2767 2775 +0.3% 1.00x (?)
DropLastAnyCollection 30 31 +3.3% 0.97x
DropLastAnyCollectionLazy 20838 20845 +0.0% 1.00x (?)
DropLastAnySeqCRangeIter 3650 3643 -0.2% 1.00x (?)
DropLastAnySeqCRangeIterLazy 3653 3639 -0.4% 1.00x (?)
DropLastAnySeqCntRange 13 13 +0.0% 1.00x
DropLastAnySeqCntRangeLazy 13 13 +0.0% 1.00x
DropLastAnySequence 5006 5052 +0.9% 0.99x (?)
DropLastAnySequenceLazy 5123 5167 +0.9% 0.99x
DropLastCountableRange 11 11 +0.0% 1.00x
DropLastSequence 538 546 +1.5% 0.99x
DropLastSequenceLazy 538 545 +1.3% 0.99x (?)
DropWhileAnyCollection 107 107 +0.0% 1.00x
DropWhileAnyCollectionLazy 125 125 +0.0% 1.00x
DropWhileAnySeqCRangeIter 16888 17101 +1.3% 0.99x (?)
DropWhileAnySeqCRangeIterLazy 125 125 +0.0% 1.00x
DropWhileAnySeqCntRange 50 50 +0.0% 1.00x
DropWhileAnySeqCntRangeLazy 125 125 +0.0% 1.00x
DropWhileAnySequence 4882 4845 -0.8% 1.01x
DropWhileAnySequenceLazy 1856 1856 +0.0% 1.00x
DropWhileArrayLazy 88 88 +0.0% 1.00x
DropWhileCountableRange 36 36 +0.0% 1.00x
DropWhileCountableRangeLazy 105 105 +0.0% 1.00x
DropWhileSequence 2223 2209 -0.6% 1.01x
DropWhileSequenceLazy 88 88 +0.0% 1.00x
EqualSubstringString 64 63 -1.6% 1.02x
EqualSubstringSubstring 48 47 -2.1% 1.02x
EqualSubstringSubstringGenericEquatable 48 47 -2.1% 1.02x
ErrorHandling 1464 1490 +1.8% 0.98x (?)
ExclusivityGlobal 5 5 +0.0% 1.00x
ExclusivityIndependent 2 2 +0.0% 1.00x
FilterEvenUsingReduce 1292 1298 +0.5% 1.00x (?)
FilterEvenUsingReduceInto 147 148 +0.7% 0.99x (?)
FloatingPointPrinting_Double_description_small 23416 23418 +0.0% 1.00x (?)
FloatingPointPrinting_Double_description_uniform 22980 23067 +0.4% 1.00x (?)
FloatingPointPrinting_Double_interpolated 76326 76963 +0.8% 0.99x (?)
FloatingPointPrinting_Float80_description_small 30738 30746 +0.0% 1.00x (?)
FloatingPointPrinting_Float80_description_uniform 29858 29886 +0.1% 1.00x (?)
FloatingPointPrinting_Float80_interpolated 79605 80815 +1.5% 0.99x (?)
FloatingPointPrinting_Float_description_small 5227 5093 -2.6% 1.03x
FloatingPointPrinting_Float_description_uniform 5032 4959 -1.5% 1.01x
FloatingPointPrinting_Float_interpolated 52363 52763 +0.8% 0.99x (?)
FrequenciesUsingReduce 5360 5350 -0.2% 1.00x (?)
Hanoi 2131 2119 -0.6% 1.01x (?)
HashTest 1009 1019 +1.0% 0.99x (?)
Histogram 891 902 +1.2% 0.99x
Integrate 334 334 +0.0% 1.00x
IterateData 1822 1818 -0.2% 1.00x (?)
Join 183 185 +1.1% 0.99x
LazilyFilteredArrayContains 35472 36661 +3.4% 0.97x
LazilyFilteredArrays 65645 64881 -1.2% 1.01x (?)
LazilyFilteredRange 3879 3879 +0.0% 1.00x
LessSubstringSubstring 48 47 -2.1% 1.02x
LessSubstringSubstringGenericComparable 48 47 -2.1% 1.02x (?)
LinkedList 7564 7549 -0.2% 1.00x (?)
LuhnAlgoEager 292 290 -0.7% 1.01x (?)
LuhnAlgoLazy 295 295 +0.0% 1.00x
MapReduce 399 398 -0.3% 1.00x (?)
MapReduceAnyCollection 401 401 +0.0% 1.00x
MapReduceAnyCollectionShort 2257 2245 -0.5% 1.01x (?)
MapReduceClass 3001 3014 +0.4% 1.00x (?)
MapReduceClassShort 4546 4566 +0.4% 1.00x (?)
MapReduceLazyCollection 13 13 +0.0% 1.00x
MapReduceLazyCollectionShort 37 36 -2.7% 1.03x (?)
MapReduceLazySequence 86 86 +0.0% 1.00x
MapReduceSequence 450 455 +1.1% 0.99x (?)
MapReduceShort 1983 1989 +0.3% 1.00x (?)
MapReduceShortString 30 30 +0.0% 1.00x
MapReduceString 79 79 +0.0% 1.00x
Memset 215 219 +1.9% 0.98x (?)
MonteCarloE 10360 10354 -0.1% 1.00x (?)
MonteCarloPi 42831 42793 -0.1% 1.00x (?)
NSDictionaryCastToSwift 5543 5527 -0.3% 1.00x (?)
NSError 172 173 +0.6% 0.99x (?)
NSStringConversion 714 746 +4.5% 0.96x (?)
NibbleSort 3672 3671 -0.0% 1.00x (?)
NopDeinit 32338 32233 -0.3% 1.00x (?)
ObjectAllocation 132 132 +0.0% 1.00x
ObjectiveCBridgeFromNSArrayAnyObject 24718 25178 +1.9% 0.98x (?)
ObjectiveCBridgeFromNSArrayAnyObjectForced 4715 4589 -2.7% 1.03x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToString 44232 44511 +0.6% 0.99x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToStringForced 42231 42496 +0.6% 0.99x (?)
ObjectiveCBridgeFromNSSetAnyObject 51909 49889 -3.9% 1.04x (?)
ObjectiveCBridgeFromNSSetAnyObjectForced 4715 4713 -0.0% 1.00x (?)
ObjectiveCBridgeFromNSSetAnyObjectToString 65902 63636 -3.4% 1.04x (?)
ObjectiveCBridgeFromNSString 1197 1195 -0.2% 1.00x (?)
ObjectiveCBridgeFromNSStringForced 2659 2695 +1.4% 0.99x (?)
ObjectiveCBridgeStubDataAppend 11297 11137 -1.4% 1.01x (?)
ObjectiveCBridgeStubDateMutation 400 400 +0.0% 1.00x
ObjectiveCBridgeStubFromArrayOfNSString 31366 31181 -0.6% 1.01x (?)
ObjectiveCBridgeStubFromNSDate 6195 6424 +3.7% 0.96x (?)
ObjectiveCBridgeStubFromNSString 1046 1035 -1.1% 1.01x (?)
ObjectiveCBridgeStubFromNSStringRef 155 159 +2.6% 0.97x
ObjectiveCBridgeStubNSDataAppend 2501 2474 -1.1% 1.01x (?)
ObjectiveCBridgeStubNSDateMutationRef 13220 13110 -0.8% 1.01x (?)
ObjectiveCBridgeStubToArrayOfNSString 38132 38938 +2.1% 0.98x (?)
ObjectiveCBridgeStubToNSDate 15374 15397 +0.1% 1.00x (?)
ObjectiveCBridgeStubToNSDateRef 3405 3400 -0.1% 1.00x (?)
ObjectiveCBridgeStubToNSString 2392 2387 -0.2% 1.00x (?)
ObjectiveCBridgeStubToNSStringRef 113 113 +0.0% 1.00x
ObjectiveCBridgeStubURLAppendPath 291235 282097 -3.1% 1.03x (?)
ObjectiveCBridgeStubURLAppendPathRef 292076 285595 -2.2% 1.02x (?)
ObjectiveCBridgeToNSArray 13962 14232 +1.9% 0.98x (?)
ObjectiveCBridgeToNSDictionary 24488 24992 +2.1% 0.98x (?)
ObjectiveCBridgeToNSSet 16187 16174 -0.1% 1.00x (?)
ObjectiveCBridgeToNSString 491 492 +0.2% 1.00x (?)
ObserverClosure 2153 2163 +0.5% 1.00x (?)
ObserverForwarderStruct 1257 1250 -0.6% 1.01x (?)
ObserverPartiallyAppliedMethod 3727 3736 +0.2% 1.00x (?)
ObserverUnappliedMethod 2683 2645 -1.4% 1.01x (?)
PartialApplyDynamicType 0 0 +0.0% 1.00x
Phonebook 5201 5104 -1.9% 1.02x (?)
PolymorphicCalls 25 25 +0.0% 1.00x
PopFrontArray 1869 1871 +0.1% 1.00x (?)
PopFrontArrayGeneric 1816 1880 +3.5% 0.97x (?)
PopFrontUnsafePointer 8684 8653 -0.4% 1.00x (?)
PrefixAnyCollection 84 83 -1.2% 1.01x
PrefixAnyCollectionLazy 61904 62538 +1.0% 0.99x (?)
PrefixAnySeqCRangeIter 16772 16938 +1.0% 0.99x (?)
PrefixAnySeqCRangeIterLazy 16826 17090 +1.6% 0.98x (?)
PrefixAnySeqCntRange 28 28 +0.0% 1.00x
PrefixAnySeqCntRangeLazy 28 28 +0.0% 1.00x
PrefixAnySequence 4350 4364 +0.3% 1.00x (?)
PrefixAnySequenceLazy 4357 4366 +0.2% 1.00x (?)
PrefixArray 35 35 +0.0% 1.00x
PrefixArrayLazy 35 35 +0.0% 1.00x
PrefixCountableRange 35 35 +0.0% 1.00x
PrefixCountableRangeLazy 35 35 +0.0% 1.00x
PrefixSequence 2222 2222 +0.0% 1.00x
PrefixSequenceLazy 2276 2275 -0.0% 1.00x (?)
PrefixWhileAnyCollection 154 154 +0.0% 1.00x
PrefixWhileAnyCollectionLazy 90 90 +0.0% 1.00x
PrefixWhileAnySeqCRangeIter 8952 8993 +0.5% 1.00x (?)
PrefixWhileAnySeqCRangeIterLazy 72 72 +0.0% 1.00x
PrefixWhileAnySeqCntRange 59 60 +1.7% 0.98x (?)
PrefixWhileAnySeqCntRangeLazy 90 90 +0.0% 1.00x
PrefixWhileAnySequence 10084 10174 +0.9% 0.99x (?)
PrefixWhileAnySequenceLazy 1393 1393 +0.0% 1.00x
PrefixWhileArray 88 88 +0.0% 1.00x
PrefixWhileArrayLazy 70 70 +0.0% 1.00x
PrefixWhileCountableRange 36 36 +0.0% 1.00x
PrefixWhileCountableRangeLazy 35 35 +0.0% 1.00x
PrefixWhileSequence 360 360 +0.0% 1.00x
PrefixWhileSequenceLazy 52 52 +0.0% 1.00x
Prims 1184 1162 -1.9% 1.02x (?)
PrimsSplit 1186 1167 -1.6% 1.02x (?)
QueueConcrete 1130 1134 +0.4% 1.00x (?)
QueueGeneric 1130 1135 +0.4% 1.00x (?)
RC4 169 168 -0.6% 1.01x (?)
RGBHistogram 3942 3981 +1.0% 0.99x (?)
RGBHistogramOfObjects 25588 25258 -1.3% 1.01x (?)
RangeAssignment 352 354 +0.6% 0.99x (?)
RangeIterationSigned 171 171 +0.0% 1.00x
RangeReplaceableCollectionPlusDefault 977 977 +0.0% 1.00x
RecursiveOwnedParameter 115 115 +0.0% 1.00x
RemoveWhereFilterInts 43 43 +0.0% 1.00x
RemoveWhereFilterString 347 352 +1.4% 0.99x (?)
RemoveWhereFilterStrings 431 431 +0.0% 1.00x
RemoveWhereMoveInts 15 15 +0.0% 1.00x
RemoveWhereMoveStrings 702 702 +0.0% 1.00x
RemoveWhereQuadraticInts 1290 1287 -0.2% 1.00x (?)
RemoveWhereQuadraticString 490 494 +0.8% 0.99x (?)
RemoveWhereQuadraticStrings 2751 2750 -0.0% 1.00x (?)
RemoveWhereSwapInts 19 19 +0.0% 1.00x
RemoveWhereSwapStrings 848 849 +0.1% 1.00x (?)
ReversedArray 57 57 +0.0% 1.00x
ReversedBidirectional 16502 16573 +0.4% 1.00x (?)
RomanNumbers 139662 137242 -1.7% 1.02x (?)
SequenceAlgosAnySequence 11900 12066 +1.4% 0.99x (?)
SequenceAlgosArray 1573 1580 +0.4% 1.00x (?)
SequenceAlgosContiguousArray 1571 1581 +0.6% 0.99x (?)
SequenceAlgosList 1358 1356 -0.1% 1.00x
SequenceAlgosRange 2577 2576 -0.0% 1.00x (?)
SequenceAlgosUnfoldSequence 1102 1102 +0.0% 1.00x
SetExclusiveOr_OfObjects 14756 14312 -3.0% 1.03x
SetIsSubsetOf 416 404 -2.9% 1.03x
SetUnion_OfObjects 12402 12198 -1.6% 1.02x
SevenBoom 874 880 +0.7% 0.99x (?)
SortLargeExistentials 6213 6221 +0.1% 1.00x (?)
SortLettersInPlace 1055 1056 +0.1% 1.00x (?)
SortSortedStrings 1037 1020 -1.6% 1.02x (?)
SortStrings 2094 2106 +0.6% 0.99x (?)
SortStringsUnicode 2617 2550 -2.6% 1.03x
StackPromo 22763 22575 -0.8% 1.01x (?)
StaticArray 9 9 +0.0% 1.00x
StrComplexWalk 1790 1782 -0.4% 1.00x (?)
StrToInt 2846 2910 +2.2% 0.98x
StringAdder 737 723 -1.9% 1.02x
StringBuilder 763 762 -0.1% 1.00x (?)
StringBuilderWithLongSubstring 1406 1387 -1.4% 1.01x (?)
StringComparison_abnormal 790 809 +2.4% 0.98x (?)
StringComparison_ascii 1314 1273 -3.1% 1.03x
StringComparison_emoji 776 789 +1.7% 0.98x (?)
StringComparison_latin1 645 616 -4.5% 1.05x
StringComparison_longSharedPrefix 933 923 -1.1% 1.01x
StringComparison_nonBMPSlowestPrenormal 1534 1565 +2.0% 0.98x (?)
StringComparison_slowerPrenormal 1619 1614 -0.3% 1.00x (?)
StringComparison_zalgo 124992 124410 -0.5% 1.00x (?)
StringEdits 172468 171799 -0.4% 1.00x (?)
StringEnumRawValueInitialization 854 824 -3.5% 1.04x
StringEqualPointerComparison 286 293 +2.4% 0.98x
StringFromLongWholeSubstring 21 21 +0.0% 1.00x
StringFromLongWholeSubstringGeneric 21 22 +4.8% 0.95x
StringHasPrefixAscii 2032 1975 -2.8% 1.03x
StringHasPrefixUnicode 110176 108565 -1.5% 1.01x (?)
StringHasSuffixAscii 2185 2118 -3.1% 1.03x
StringHasSuffixUnicode 114809 112877 -1.7% 1.02x (?)
StringInterpolation 9915 9933 +0.2% 1.00x (?)
StringInterpolationManySmallSegments 18773 18459 -1.7% 1.02x (?)
StringInterpolationSmall 6536 6484 -0.8% 1.01x (?)
StringRemoveDupes 816 787 -3.6% 1.04x
StringUTF16Builder 2700 2791 +3.4% 0.97x (?)
StringUTF16SubstringBuilder 6070 5860 -3.5% 1.04x (?)
StringWalk 1437 1417 -1.4% 1.01x
StringWordBuilder 2430 2416 -0.6% 1.01x (?)
SubstringComparable 26 26 +0.0% 1.00x
SubstringEqualString 763 769 +0.8% 0.99x (?)
SubstringEquatable 1332 1377 +3.4% 0.97x
SubstringFromLongString 10 10 +0.0% 1.00x
SubstringFromLongStringGeneric 75 75 +0.0% 1.00x
SuffixAnyCollection 31 31 +0.0% 1.00x
SuffixAnyCollectionLazy 20895 20797 -0.5% 1.00x (?)
SuffixAnySeqCRangeIter 3843 3871 +0.7% 0.99x (?)
SuffixAnySeqCRangeIterLazy 3848 3871 +0.6% 0.99x (?)
SuffixAnySeqCntRange 20 20 +0.0% 1.00x
SuffixAnySeqCntRangeLazy 20 20 +0.0% 1.00x
SuffixAnySequence 4982 5044 +1.2% 0.99x (?)
SuffixAnySequenceLazy 5091 5158 +1.3% 0.99x
SuffixSequence 3667 3702 +1.0% 0.99x (?)
SuffixSequenceLazy 3667 3704 +1.0% 0.99x
SumUsingReduce 102 101 -1.0% 1.01x (?)
SuperChars 14567 14583 +0.1% 1.00x (?)
TwoSum 1743 1758 +0.9% 0.99x (?)
TypeFlood 0 0 +0.0% 1.00x
UTF8Decode 291 295 +1.4% 0.99x
Walsh 401 403 +0.5% 1.00x (?)
WordCountHistogramASCII 8369 8023 -4.1% 1.04x
WordCountHistogramUTF16 14706 14262 -3.0% 1.03x (?)
WordCountUniqueASCII 2538 2456 -3.2% 1.03x (?)
WordCountUniqueUTF16 7883 7784 -1.3% 1.01x (?)
WordSplitASCII 8349 8204 -1.7% 1.02x (?)
XorLoop 394 401 +1.8% 0.98x (?)

Unoptimized (Onone)

Regression (17)
TEST OLD NEW DELTA SPEEDUP
SetIntersect_OfObjects 10824 12799 +18.2% 0.85x
SetIsSubsetOf_OfObjects 1742 1986 +14.0% 0.88x
CStringShortAscii 6329 7021 +10.9% 0.90x (?)
CharIndexing_korean_unicodeScalars_Backwards 351159 386558 +10.1% 0.91x
DropFirstArrayLazy 29259 32173 +10.0% 0.91x
CharIndexing_chinese_unicodeScalars_Backwards 276503 303403 +9.7% 0.91x (?)
PrefixArrayLazy 29284 32081 +9.6% 0.91x
ExclusivityGlobal 183 200 +9.3% 0.92x
StringWalk 12426 13477 +8.5% 0.92x (?)
PointerArithmetics 117412 126038 +7.3% 0.93x
ObjectiveCBridgeToNSDictionary 25773 27488 +6.7% 0.94x (?)
BitCount 8614 9120 +5.9% 0.94x
SuffixAnyCollectionLazy 33611 35546 +5.8% 0.95x (?)
TypeFlood 195 206 +5.6% 0.95x (?)
SetUnion_OfObjects 32262 33995 +5.4% 0.95x (?)
ObjectiveCBridgeStubFromArrayOfNSString 32177 33898 +5.3% 0.95x (?)
WordSplitUTF16 14187 14943 +5.3% 0.95x (?)
Improvement (29)
TEST OLD NEW DELTA SPEEDUP
Dictionary4 1610 1190 -26.1% 1.35x
NSError 709 603 -15.0% 1.18x (?)
Dictionary4OfObjects 2220 1941 -12.6% 1.14x
ObjectiveCBridgeFromNSSetAnyObjectForced 6383 5677 -11.1% 1.12x (?)
FloatingPointPrinting_Float_interpolated 78718 70230 -10.8% 1.12x (?)
ArrayOfPOD 845 761 -9.9% 1.11x
PrefixWhileAnySeqCRangeIterLazy 20671 18828 -8.9% 1.10x (?)
PrefixWhileCountableRangeLazy 20297 18495 -8.9% 1.10x (?)
DataReplaceMediumBuffer 12940 11801 -8.8% 1.10x (?)
PrefixWhileAnyCollectionLazy 20654 18878 -8.6% 1.09x (?)
Combos 2440 2240 -8.2% 1.09x (?)
ErrorHandling 6847 6327 -7.6% 1.08x (?)
PrefixWhileAnySeqCntRangeLazy 20504 19051 -7.1% 1.08x (?)
DictionaryBridge 1405 1306 -7.0% 1.08x (?)
QueueConcrete 15222 14236 -6.5% 1.07x
NSDictionaryCastToSwift 7115 6672 -6.2% 1.07x (?)
DataReplaceSmall 7305 6867 -6.0% 1.06x
ObjectiveCBridgeFromNSDictionaryAnyObject 120973 113744 -6.0% 1.06x (?)
ArrayAppendLazyMap 179366 168895 -5.8% 1.06x (?)
StackPromo 104095 98147 -5.7% 1.06x (?)
StringWordBuilderReservingCapacity 2133 2014 -5.6% 1.06x
DropLastAnySeqCRangeIterLazy 43744 41305 -5.6% 1.06x
DropLastAnySeqCRangeIter 43658 41231 -5.6% 1.06x
StringInterpolationSmall 9067 8572 -5.5% 1.06x (?)
Dictionary3OfObjects 2320 2195 -5.4% 1.06x (?)
CharIndexing_japanese_unicodeScalars 400641 379311 -5.3% 1.06x (?)
DictionaryGroup 4845 4600 -5.1% 1.05x
ArrayOfGenericPOD2 1187 1128 -5.0% 1.05x
PrefixWhileAnySeqCRangeIter 36492 34691 -4.9% 1.05x (?)
No Changes (376)
TEST OLD NEW DELTA SPEEDUP
AngryPhonebook 5571 5595 +0.4% 1.00x (?)
AnyHashableWithAClass 102793 102025 -0.7% 1.01x
Array2D 633007 633075 +0.0% 1.00x (?)
ArrayAppend 4557 4672 +2.5% 0.98x
ArrayAppendArrayOfInt 863 866 +0.3% 1.00x (?)
ArrayAppendAscii 39026 39389 +0.9% 0.99x
ArrayAppendFromGeneric 868 869 +0.1% 1.00x (?)
ArrayAppendGenericStructs 1501 1502 +0.1% 1.00x (?)
ArrayAppendLatin1 64778 64720 -0.1% 1.00x (?)
ArrayAppendOptionals 1500 1504 +0.3% 1.00x
ArrayAppendRepeatCol 181656 186883 +2.9% 0.97x
ArrayAppendReserved 4398 4280 -2.7% 1.03x
ArrayAppendSequence 102659 105149 +2.4% 0.98x
ArrayAppendStrings 6455 6378 -1.2% 1.01x (?)
ArrayAppendToFromGeneric 866 868 +0.2% 1.00x (?)
ArrayAppendToGeneric 872 870 -0.2% 1.00x (?)
ArrayAppendUTF16 64077 65025 +1.5% 0.99x
ArrayInClass 6210 6220 +0.2% 1.00x
ArrayLiteral 1837 1833 -0.2% 1.00x (?)
ArrayOfGenericRef 10710 10695 -0.1% 1.00x (?)
ArrayOfRef 9821 9823 +0.0% 1.00x (?)
ArrayPlusEqualArrayOfInt 866 867 +0.1% 1.00x (?)
ArrayPlusEqualFiveElementCollection 235431 235229 -0.1% 1.00x (?)
ArrayPlusEqualSingleElementCollection 231717 232745 +0.4% 1.00x (?)
ArrayPlusEqualThreeElements 9337 9305 -0.3% 1.00x (?)
ArraySubscript 107040 108336 +1.2% 0.99x
ArrayValueProp 3679 3655 -0.7% 1.01x (?)
ArrayValueProp2 15276 15288 +0.1% 1.00x (?)
ArrayValueProp3 4189 4201 +0.3% 1.00x (?)
ArrayValueProp4 4156 4143 -0.3% 1.00x (?)
BinaryFloatingPointPropertiesBinade 88 88 +0.0% 1.00x
BinaryFloatingPointPropertiesNextUp 131 134 +2.3% 0.98x
BinaryFloatingPointPropertiesUlp 131 131 +0.0% 1.00x
ByteSwap 9469 9808 +3.6% 0.97x
COWTree 11864 11843 -0.2% 1.00x (?)
CSVParsing 2989895 2931896 -1.9% 1.02x
CSVParsingAlt 1402015 1413537 +0.8% 0.99x (?)
CSVParsingAltIndices 2363008 2462435 +4.2% 0.96x (?)
CStringLongAscii 5395 5642 +4.6% 0.96x
CStringLongNonAscii 2473 2505 +1.3% 0.99x (?)
Calculator 2154 2132 -1.0% 1.01x
CaptureProp 331791 333626 +0.6% 0.99x (?)
ChainedFilterMap 238384 233182 -2.2% 1.02x
CharIndexing_ascii_unicodeScalars 335018 319856 -4.5% 1.05x (?)
CharIndexing_ascii_unicodeScalars_Backwards 399692 402542 +0.7% 0.99x (?)
CharIndexing_chinese_unicodeScalars 251759 247012 -1.9% 1.02x (?)
CharIndexing_japanese_unicodeScalars_Backwards 448850 455918 +1.6% 0.98x (?)
CharIndexing_korean_unicodeScalars 316781 310293 -2.0% 1.02x (?)
CharIndexing_punctuatedJapanese_unicodeScalars 59141 58424 -1.2% 1.01x (?)
CharIndexing_punctuatedJapanese_unicodeScalars_Backwards 63664 65970 +3.6% 0.97x (?)
CharIndexing_punctuated_unicodeScalars 74565 72953 -2.2% 1.02x (?)
CharIndexing_punctuated_unicodeScalars_Backwards 81827 85463 +4.4% 0.96x (?)
CharIndexing_russian_unicodeScalars 273028 264985 -2.9% 1.03x (?)
CharIndexing_russian_unicodeScalars_Backwards 302444 307948 +1.8% 0.98x (?)
CharIndexing_tweet_unicodeScalars 647671 632682 -2.3% 1.02x (?)
CharIndexing_tweet_unicodeScalars_Backwards 720627 735779 +2.1% 0.98x (?)
CharIndexing_utf16_unicodeScalars 284031 285287 +0.4% 1.00x (?)
CharIndexing_utf16_unicodeScalars_Backwards 306041 314071 +2.6% 0.97x (?)
CharIteration_ascii_unicodeScalars 148996 149131 +0.1% 1.00x (?)
CharIteration_ascii_unicodeScalars_Backwards 263309 258069 -2.0% 1.02x (?)
CharIteration_chinese_unicodeScalars 112462 113205 +0.7% 0.99x (?)
CharIteration_chinese_unicodeScalars_Backwards 192982 195257 +1.2% 0.99x (?)
CharIteration_japanese_unicodeScalars 184634 178579 -3.3% 1.03x (?)
CharIteration_japanese_unicodeScalars_Backwards 304490 313340 +2.9% 0.97x (?)
CharIteration_korean_unicodeScalars 143951 144670 +0.5% 1.00x (?)
CharIteration_korean_unicodeScalars_Backwards 253907 253128 -0.3% 1.00x (?)
CharIteration_punctuatedJapanese_unicodeScalars 26435 26522 +0.3% 1.00x (?)
CharIteration_punctuatedJapanese_unicodeScalars_Backwards 44186 45051 +2.0% 0.98x (?)
CharIteration_punctuated_unicodeScalars 33279 33431 +0.5% 1.00x (?)
CharIteration_punctuated_unicodeScalars_Backwards 56099 57470 +2.4% 0.98x (?)
CharIteration_russian_unicodeScalars 123833 124130 +0.2% 1.00x (?)
CharIteration_russian_unicodeScalars_Backwards 214470 218806 +2.0% 0.98x (?)
CharIteration_tweet_unicodeScalars 294090 295433 +0.5% 1.00x (?)
CharIteration_tweet_unicodeScalars_Backwards 529560 524408 -1.0% 1.01x (?)
CharIteration_utf16_unicodeScalars 126728 127191 +0.4% 1.00x (?)
CharIteration_utf16_unicodeScalars_Backwards 224519 226494 +0.9% 0.99x (?)
CharacterLiteralsLarge 5845 5825 -0.3% 1.00x (?)
CharacterLiteralsSmall 658 681 +3.5% 0.97x
CharacterPropertiesFetch 5637 5515 -2.2% 1.02x (?)
CharacterPropertiesPrecomputed 3638 3626 -0.3% 1.00x (?)
CharacterPropertiesStashed 2354 2330 -1.0% 1.01x (?)
CharacterPropertiesStashedMemo 4361 4450 +2.0% 0.98x (?)
Chars 35846 35905 +0.2% 1.00x (?)
ClassArrayGetter 987 987 +0.0% 1.00x
DataAccessBytes 2396 2399 +0.1% 1.00x (?)
DataAppendArray 5645 5520 -2.2% 1.02x (?)
DataAppendBytes 5135 5234 +1.9% 0.98x (?)
DataAppendDataLargeToLarge 67109 67400 +0.4% 1.00x (?)
DataAppendDataLargeToMedium 35342 35006 -1.0% 1.01x (?)
DataAppendDataLargeToSmall 34305 34459 +0.4% 1.00x (?)
DataAppendDataMediumToLarge 37850 37560 -0.8% 1.01x (?)
DataAppendDataMediumToMedium 6513 6477 -0.6% 1.01x (?)
DataAppendDataMediumToSmall 6008 5985 -0.4% 1.00x (?)
DataAppendDataSmallToLarge 36660 36391 -0.7% 1.01x (?)
DataAppendDataSmallToMedium 6013 6004 -0.1% 1.00x (?)
DataAppendDataSmallToSmall 5915 6101 +3.1% 0.97x (?)
DataAppendSequence 1891292 1953809 +3.3% 0.97x
DataCopyBytes 2481 2492 +0.4% 1.00x (?)
DataCount 223 224 +0.4% 1.00x
DataMutateBytes 5199 5286 +1.7% 0.98x (?)
DataReplaceLarge 38116 39757 +4.3% 0.96x (?)
DataReplaceLargeBuffer 57846 58468 +1.1% 0.99x (?)
DataReplaceMedium 9007 9168 +1.8% 0.98x (?)
DataReplaceSmallBuffer 9761 9638 -1.3% 1.01x (?)
DataReset 2867 2892 +0.9% 0.99x (?)
DataSetCount 585 564 -3.6% 1.04x (?)
DataSubscript 443 443 +0.0% 1.00x
DictOfArraysToArrayOfDicts 3544 3434 -3.1% 1.03x (?)
Dictionary 2330 2351 +0.9% 0.99x (?)
Dictionary2 1498 1495 -0.2% 1.00x (?)
Dictionary2OfObjects 4638 4644 +0.1% 1.00x (?)
Dictionary3 895 899 +0.4% 1.00x (?)
DictionaryCopy 322207 329774 +2.3% 0.98x
DictionaryFilter 337401 339146 +0.5% 0.99x (?)
DictionaryGroupOfObjects 7466 7649 +2.5% 0.98x (?)
DictionaryLiteral 8959 8950 -0.1% 1.00x (?)
DictionaryOfObjects 6090 6026 -1.1% 1.01x (?)
DictionaryRemove 17781 17837 +0.3% 1.00x (?)
DictionaryRemoveOfObjects 54754 54223 -1.0% 1.01x (?)
DictionarySubscriptDefaultMutation 2033 2007 -1.3% 1.01x (?)
DictionarySubscriptDefaultMutationArray 2332 2259 -3.1% 1.03x
DictionarySubscriptDefaultMutationArrayOfObjects 9651 9524 -1.3% 1.01x (?)
DictionarySubscriptDefaultMutationOfObjects 5557 5384 -3.1% 1.03x (?)
DictionarySwap 5335 5358 +0.4% 1.00x
DictionarySwapAt 36480 36478 -0.0% 1.00x (?)
DictionarySwapAtOfObjects 114857 114274 -0.5% 1.01x (?)
DictionarySwapOfObjects 19722 19752 +0.2% 1.00x (?)
DoubleWidthDivision 0 0 +0.0% 1.00x
DropFirstAnyCollection 15504 15724 +1.4% 0.99x
DropFirstAnyCollectionLazy 99994 100535 +0.5% 0.99x (?)
DropFirstAnySeqCRangeIter 23685 23988 +1.3% 0.99x
DropFirstAnySeqCRangeIterLazy 23748 23975 +1.0% 0.99x (?)
DropFirstAnySeqCntRange 15654 15748 +0.6% 0.99x (?)
DropFirstAnySeqCntRangeLazy 15484 15619 +0.9% 0.99x (?)
DropFirstAnySequence 12794 13125 +2.6% 0.97x
DropFirstAnySequenceLazy 12803 12836 +0.3% 1.00x (?)
DropFirstArray 3423 3455 +0.9% 0.99x (?)
DropFirstCountableRange 323 323 +0.0% 1.00x
DropFirstCountableRangeLazy 34075 34500 +1.2% 0.99x
DropFirstSequence 12457 12550 +0.7% 0.99x
DropFirstSequenceLazy 12343 12620 +2.2% 0.98x
DropLastAnyCollection 5187 5261 +1.4% 0.99x
DropLastAnyCollectionLazy 33081 34672 +4.8% 0.95x (?)
DropLastAnySeqCntRange 5224 5224 +0.0% 1.00x
DropLastAnySeqCntRangeLazy 5174 5210 +0.7% 0.99x
DropLastAnySequence 30510 30744 +0.8% 0.99x
DropLastAnySequenceLazy 30486 30671 +0.6% 0.99x
DropLastCountableRange 112 112 +0.0% 1.00x
DropLastCountableRangeLazy 11360 11509 +1.3% 0.99x (?)
DropLastSequence 30291 30531 +0.8% 0.99x
DropLastSequenceLazy 30456 30666 +0.7% 0.99x
DropWhileAnyCollection 20082 20257 +0.9% 0.99x (?)
DropWhileAnyCollectionLazy 22761 22772 +0.0% 1.00x (?)
DropWhileAnySeqCRangeIter 24503 24885 +1.6% 0.98x (?)
DropWhileAnySeqCRangeIterLazy 22652 22723 +0.3% 1.00x (?)
DropWhileAnySeqCntRange 20023 20240 +1.1% 0.99x (?)
DropWhileAnySeqCntRangeLazy 22622 22691 +0.3% 1.00x (?)
DropWhileAnySequence 13574 13816 +1.8% 0.98x
DropWhileAnySequenceLazy 12316 12538 +1.8% 0.98x
DropWhileArrayLazy 14040 14071 +0.2% 1.00x (?)
DropWhileCountableRange 4891 4926 +0.7% 0.99x
DropWhileCountableRangeLazy 22181 22356 +0.8% 0.99x (?)
DropWhileSequence 13140 13339 +1.5% 0.99x
DropWhileSequenceLazy 12034 12116 +0.7% 0.99x
EqualStringSubstring 71 71 +0.0% 1.00x
EqualSubstringString 71 71 +0.0% 1.00x
EqualSubstringSubstring 72 72 +0.0% 1.00x
EqualSubstringSubstringGenericEquatable 57 58 +1.8% 0.98x
ExclusivityIndependent 72 75 +4.2% 0.96x (?)
FatCompactMap 316944 306310 -3.4% 1.03x
FilterEvenUsingReduce 3587 3581 -0.2% 1.00x (?)
FilterEvenUsingReduceInto 1867 1875 +0.4% 1.00x (?)
FloatingPointPrinting_Double_description_small 24485 24546 +0.2% 1.00x (?)
FloatingPointPrinting_Double_description_uniform 36400 36572 +0.5% 1.00x (?)
FloatingPointPrinting_Double_interpolated 94755 97664 +3.1% 0.97x (?)
FloatingPointPrinting_Float80_description_small 31545 31470 -0.2% 1.00x (?)
FloatingPointPrinting_Float80_description_uniform 61114 58834 -3.7% 1.04x (?)
FloatingPointPrinting_Float80_interpolated 115310 117276 +1.7% 0.98x (?)
FloatingPointPrinting_Float_description_small 7000 6713 -4.1% 1.04x
FloatingPointPrinting_Float_description_uniform 17330 17648 +1.8% 0.98x (?)
FrequenciesUsingReduce 11442 11451 +0.1% 1.00x (?)
FrequenciesUsingReduceInto 3332 3444 +3.4% 0.97x (?)
Hanoi 20471 20286 -0.9% 1.01x (?)
HashTest 21133 22029 +4.2% 0.96x
Histogram 6559 6720 +2.5% 0.98x (?)
Integrate 460 460 +0.0% 1.00x
IterateData 5431 5414 -0.3% 1.00x
Join 777 769 -1.0% 1.01x
LazilyFilteredArrayContains 755392 754472 -0.1% 1.00x (?)
LazilyFilteredArrays 1425456 1428885 +0.2% 1.00x (?)
LazilyFilteredRange 539944 542624 +0.5% 1.00x
LessSubstringSubstring 72 71 -1.4% 1.01x
LessSubstringSubstringGenericComparable 58 58 +0.0% 1.00x
LinkedList 32335 32445 +0.3% 1.00x
LuhnAlgoEager 5570 5509 -1.1% 1.01x (?)
LuhnAlgoLazy 5949 5773 -3.0% 1.03x
MapReduce 26043 25458 -2.2% 1.02x
MapReduceAnyCollection 25832 25569 -1.0% 1.01x
MapReduceAnyCollectionShort 37521 36741 -2.1% 1.02x (?)
MapReduceClass 29454 29450 -0.0% 1.00x (?)
MapReduceClassShort 41180 41424 +0.6% 0.99x (?)
MapReduceLazyCollection 23830 22854 -4.1% 1.04x
MapReduceLazyCollectionShort 35767 34210 -4.4% 1.05x
MapReduceLazySequence 20189 20329 +0.7% 0.99x (?)
MapReduceSequence 30481 30971 +1.6% 0.98x (?)
MapReduceShort 37087 36397 -1.9% 1.02x (?)
MapReduceShortString 231 237 +2.6% 0.97x (?)
MapReduceString 1742 1732 -0.6% 1.01x (?)
Memset 44133 44119 -0.0% 1.00x (?)
MonteCarloE 1134388 1150822 +1.4% 0.99x (?)
MonteCarloPi 5162291 5215883 +1.0% 0.99x
NSStringConversion 776 787 +1.4% 0.99x
NibbleSort 498075 502971 +1.0% 0.99x (?)
NopDeinit 194308 203387 +4.7% 0.96x
ObjectAllocation 1256 1251 -0.4% 1.00x (?)
ObjectiveCBridgeFromNSArrayAnyObject 29243 28803 -1.5% 1.02x (?)
ObjectiveCBridgeFromNSArrayAnyObjectForced 9304 9228 -0.8% 1.01x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToString 46829 48286 +3.1% 0.97x (?)
ObjectiveCBridgeFromNSArrayAnyObjectToStringForced 47532 46968 -1.2% 1.01x (?)
ObjectiveCBridgeFromNSSetAnyObject 55199 56243 +1.9% 0.98x (?)
ObjectiveCBridgeFromNSSetAnyObjectToString 71546 70430 -1.6% 1.02x (?)
ObjectiveCBridgeFromNSString 2844 2873 +1.0% 0.99x (?)
ObjectiveCBridgeFromNSStringForced 2777 2834 +2.1% 0.98x (?)
ObjectiveCBridgeStubDataAppend 6149 6254 +1.7% 0.98x (?)
ObjectiveCBridgeStubDateMutation 745 744 -0.1% 1.00x (?)
ObjectiveCBridgeStubFromNSDate 6974 6881 -1.3% 1.01x (?)
ObjectiveCBridgeStubFromNSString 1099 1072 -2.5% 1.03x (?)
ObjectiveCBridgeStubFromNSStringRef 199 194 -2.5% 1.03x (?)
ObjectiveCBridgeStubNSDataAppend 3020 2999 -0.7% 1.01x (?)
ObjectiveCBridgeStubNSDateMutationRef 15475 16043 +3.7% 0.96x (?)
ObjectiveCBridgeStubToArrayOfNSString 38708 38950 +0.6% 0.99x (?)
ObjectiveCBridgeStubToNSDate 16393 15756 -3.9% 1.04x (?)
ObjectiveCBridgeStubToNSDateRef 3480 3463 -0.5% 1.00x (?)
ObjectiveCBridgeStubToNSString 2412 2415 +0.1% 1.00x (?)
ObjectiveCBridgeStubToNSStringRef 153 154 +0.7% 0.99x (?)
ObjectiveCBridgeStubURLAppendPath 300419 302075 +0.6% 0.99x (?)
ObjectiveCBridgeStubURLAppendPathRef 304716 297619 -2.3% 1.02x (?)
ObjectiveCBridgeToNSArray 14429 14441 +0.1% 1.00x (?)
ObjectiveCBridgeToNSSet 17139 17439 +1.8% 0.98x (?)
ObjectiveCBridgeToNSString 530 529 -0.2% 1.00x (?)
ObserverClosure 6422 6389 -0.5% 1.01x (?)
ObserverForwarderStruct 4288 4346 +1.4% 0.99x
ObserverPartiallyAppliedMethod 8000 7952 -0.6% 1.01x (?)
ObserverUnappliedMethod 8108 8105 -0.0% 1.00x (?)
OpenClose 872 835 -4.2% 1.04x
PartialApplyDynamicType 39511 41099 +4.0% 0.96x (?)
Phonebook 19603 18718 -4.5% 1.05x
PolymorphicCalls 2383 2381 -0.1% 1.00x (?)
PopFrontArray 4631 4670 +0.8% 0.99x
PopFrontArrayGeneric 5370 5323 -0.9% 1.01x (?)
PopFrontUnsafePointer 10576 10646 +0.7% 0.99x (?)
PrefixAnyCollection 15532 15718 +1.2% 0.99x (?)
PrefixAnyCollectionLazy 101471 101022 -0.4% 1.00x (?)
PrefixAnySeqCRangeIter 18945 19296 +1.9% 0.98x
PrefixAnySeqCRangeIterLazy 19033 19172 +0.7% 0.99x (?)
PrefixAnySeqCntRange 15603 15572 -0.2% 1.00x (?)
PrefixAnySeqCntRangeLazy 15504 15688 +1.2% 0.99x
PrefixAnySequence 10463 10491 +0.3% 1.00x (?)
PrefixAnySequenceLazy 10454 10527 +0.7% 0.99x (?)
PrefixArray 3429 3456 +0.8% 0.99x
PrefixCountableRange 323 323 +0.0% 1.00x
PrefixCountableRangeLazy 34088 34517 +1.3% 0.99x
PrefixSequence 10076 10132 +0.6% 0.99x (?)
PrefixSequenceLazy 10047 10234 +1.9% 0.98x
PrefixWhileAnyCollection 29316 29349 +0.1% 1.00x (?)
PrefixWhileAnySeqCntRange 29065 29282 +0.7% 0.99x (?)
PrefixWhileAnySequence 26588 26688 +0.4% 1.00x (?)
PrefixWhileAnySequenceLazy 10839 11120 +2.6% 0.97x (?)
PrefixWhileArray 10607 10610 +0.0% 1.00x (?)
PrefixWhileArrayLazy 12263 12309 +0.4% 1.00x
PrefixWhileCountableRange 13931 14071 +1.0% 0.99x (?)
PrefixWhileSequence 26057 26455 +1.5% 0.98x
PrefixWhileSequenceLazy 10647 10720 +0.7% 0.99x
Prims 9857 9915 +0.6% 0.99x (?)
PrimsSplit 9816 9709 -1.1% 1.01x (?)
QueueGeneric 19678 18896 -4.0% 1.04x
RC4 16469 15951 -3.1% 1.03x
RGBHistogram 24940 25689 +3.0% 0.97x (?)
RGBHistogramOfObjects 77217 80151 +3.8% 0.96x (?)
RangeAssignment 2621 2647 +1.0% 0.99x (?)
RangeIterationSigned 14441 15124 +4.7% 0.95x (?)
RangeReplaceableCollectionPlusDefault 11267 11074 -1.7% 1.02x (?)
RecursiveOwnedParameter 5798 5932 +2.3% 0.98x (?)
RemoveWhereFilterInts 1932 1951 +1.0% 0.99x (?)
RemoveWhereFilterString 1302 1299 -0.2% 1.00x (?)
RemoveWhereFilterStrings 2451 2458 +0.3% 1.00x (?)
RemoveWhereMoveInts 3375 3385 +0.3% 1.00x
RemoveWhereMoveStrings 3886 3886 +0.0% 1.00x
RemoveWhereQuadraticInts 8030 8069 +0.5% 1.00x (?)
RemoveWhereQuadraticString 2258 2249 -0.4% 1.00x (?)
RemoveWhereQuadraticStrings 9702 9713 +0.1% 1.00x (?)
RemoveWhereSwapInts 6090 6066 -0.4% 1.00x
RemoveWhereSwapStrings 6789 6789 +0.0% 1.00x
ReversedArray 13079 13047 -0.2% 1.00x (?)
ReversedBidirectional 43101 43582 +1.1% 0.99x (?)
ReversedDictionary 23165 23903 +3.2% 0.97x
RomanNumbers 1346474 1339181 -0.5% 1.01x (?)
SequenceAlgosAnySequence 13448 13177 -2.0% 1.02x (?)
SequenceAlgosArray 750033 752157 +0.3% 1.00x (?)
SequenceAlgosContiguousArray 291542 286673 -1.7% 1.02x
SequenceAlgosList 8692 8704 +0.1% 1.00x (?)
SequenceAlgosRange 1315123 1292818 -1.7% 1.02x (?)
SequenceAlgosUnfoldSequence 6514 6548 +0.5% 0.99x
SetExclusiveOr 17293 17182 -0.6% 1.01x (?)
SetExclusiveOr_OfObjects 46081 47491 +3.1% 0.97x (?)
SetIntersect 6759 6858 +1.5% 0.99x
SetIsSubsetOf 1214 1227 +1.1% 0.99x (?)
SetUnion 12560 12334 -1.8% 1.02x (?)
SevenBoom 1076 1082 +0.6% 0.99x (?)
Sim2DArray 43423 43576 +0.4% 1.00x
SortLargeExistentials 11760 11752 -0.1% 1.00x (?)
SortLettersInPlace 1952 1946 -0.3% 1.00x (?)
SortSortedStrings 1201 1159 -3.5% 1.04x
SortStrings 2413 2321 -3.8% 1.04x
SortStringsUnicode 2864 2821 -1.5% 1.02x
StaticArray 2540 2542 +0.1% 1.00x (?)
StrComplexWalk 6835 6832 -0.0% 1.00x (?)
StrToInt 83043 82912 -0.2% 1.00x (?)
StringAdder 1144 1141 -0.3% 1.00x (?)
StringBuilder 5516 5596 +1.5% 0.99x (?)
StringBuilderLong 2941 2922 -0.6% 1.01x
StringBuilderWithLongSubstring 4782 4652 -2.7% 1.03x (?)
StringComparison_abnormal 1349 1398 +3.6% 0.96x
StringComparison_ascii 9425 9419 -0.1% 1.00x (?)
StringComparison_emoji 1984 1970 -0.7% 1.01x (?)
StringComparison_fastPrenormal 4921 4885 -0.7% 1.01x
StringComparison_latin1 3844 3814 -0.8% 1.01x
StringComparison_longSharedPrefix 2357 2358 +0.0% 1.00x (?)
StringComparison_nonBMPSlowestPrenormal 3683 3637 -1.2% 1.01x
StringComparison_slowerPrenormal 4156 4097 -1.4% 1.01x (?)
StringComparison_zalgo 127363 127220 -0.1% 1.00x (?)
StringEdits 396483 384557 -3.0% 1.03x (?)
StringEnumRawValueInitialization 33716 33343 -1.1% 1.01x (?)
StringEqualPointerComparison 1584 1620 +2.3% 0.98x
StringFromLongWholeSubstring 12 12 +0.0% 1.00x
StringFromLongWholeSubstringGeneric 196 198 +1.0% 0.99x (?)
StringHasPrefixAscii 3210 3103 -3.3% 1.03x
StringHasPrefixUnicode 109242 105261 -3.6% 1.04x
StringHasSuffixAscii 3245 3264 +0.6% 0.99x
StringHasSuffixUnicode 107773 106153 -1.5% 1.02x
StringInterpolation 12076 12030 -0.4% 1.00x (?)
StringInterpolationManySmallSegments 20639 20096 -2.6% 1.03x (?)
StringMatch 41542 43145 +3.9% 0.96x (?)
StringRemoveDupes 792 794 +0.3% 1.00x (?)
StringUTF16Builder 8089 7977 -1.4% 1.01x (?)
StringUTF16SubstringBuilder 24415 24121 -1.2% 1.01x (?)
StringWithCString 43363 43890 +1.2% 0.99x
StringWordBuilder 2474 2476 +0.1% 1.00x (?)
SubstringComparable 1632 1624 -0.5% 1.00x (?)
SubstringEqualString 1699 1711 +0.7% 0.99x (?)
SubstringEquatable 5556 5765 +3.8% 0.96x (?)
SubstringFromLongString 18 18 +0.0% 1.00x
SubstringFromLongStringGeneric 107 108 +0.9% 0.99x (?)
SuffixAnyCollection 5197 5251 +1.0% 0.99x
SuffixAnySeqCRangeIter 37380 36704 -1.8% 1.02x (?)
SuffixAnySeqCRangeIterLazy 37618 37018 -1.6% 1.02x (?)
SuffixAnySeqCntRange 5181 5279 +1.9% 0.98x (?)
SuffixAnySeqCntRangeLazy 5182 5215 +0.6% 0.99x
SuffixAnySequence 26268 26379 +0.4% 1.00x
SuffixAnySequenceLazy 27033 26828 -0.8% 1.01x (?)
SuffixCountableRange 112 112 +0.0% 1.00x
SuffixCountableRangeLazy 11379 11518 +1.2% 0.99x
SuffixSequence 25968 26167 +0.8% 0.99x
SuffixSequenceLazy 26061 26238 +0.7% 0.99x (?)
SumUsingReduce 158495 159446 +0.6% 0.99x
SumUsingReduceInto 156121 152434 -2.4% 1.02x
SuperChars 84985 86940 +2.3% 0.98x
TwoSum 3892 3741 -3.9% 1.04x (?)
UTF8Decode 29588 30103 +1.7% 0.98x
Walsh 11969 11968 -0.0% 1.00x (?)
WordCountHistogramASCII 38545 38053 -1.3% 1.01x
WordCountHistogramUTF16 47318 45410 -4.0% 1.04x
WordCountUniqueASCII 7466 7441 -0.3% 1.00x (?)
WordCountUniqueUTF16 13236 13354 +0.9% 0.99x (?)
WordSplitASCII 12269 12171 -0.8% 1.01x (?)
XorLoop 23230 23230 +0.0% 1.00x
Hardware Overview
  Model Name: Mac Pro
  Model Identifier: MacPro6,1
  Processor Name: 12-Core Intel Xeon E5
  Processor Speed: 2.7 GHz
  Number of Processors: 1
  Total Number of Cores: 12
  L2 Cache (per Core): 256 KB
  L3 Cache: 30 MB
  Memory: 64 GB

@lorentey
Copy link
Member Author

lorentey commented Apr 24, 2018

Those are some nice boosts for Dictionary4; eliminating all those nested hashers helped a lot. The 5-6% improvements elsewhere might be due to the removal of the finalization precondition. (I'd have expected less than that, but I'll take it!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
swift evolution approved Flag → feature: A feature that was approved through the Swift evolution process
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants