Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -typecheck -solver-expression-time-threshold=1

// REQUIRES: asserts,no_asan
// REQUIRES: objc_interop

// FIXME: This should be a scale-test but it doesn't allow passing `%clang-importer-sdk`
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// RUN: %target-typecheck-verify-swift -solver-scope-threshold=100

// https://github.com/swiftlang/swift/issues/46157

func slow() {
let _: (Double) -> Double = { x in x*x*x*x - 3*x*x*x + 2 }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// RUN: %scale-test --begin 1 --end 5 --step 1 --select NumLeafScopes %s -Xfrontend=-typecheck
// REQUIRES: asserts, no_asan

// https://github.com/swiftlang/swift/issues/46253

func slow() {
let d: [Int: (Int) -> Int] = [
%for i in range(0, N):
${i}: { -$0 },
%end
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// RUN: %scale-test --begin 1 --end 5 --step 1 --select NumLeafScopes %s -Xfrontend=-typecheck
// REQUIRES: asserts, no_asan

// https://github.com/swiftlang/swift/issues/46253

func slow() {
let d: [Int: (Int) -> Bool] = [
%for i in range(0, N):
${i}: { $0 == $0 },
%end
]
}
10 changes: 10 additions & 0 deletions validation-test/Sema/type_checker_perf/fast/issue-46420.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// RUN: %target-typecheck-verify-swift -solver-scope-threshold=200

// https://github.com/swiftlang/swift/issues/46420

func slow() {
let new_M: [Int] = Array<Int>(repeating: 0, count: 200)
let _ = (0 ..< 32).map({ (a) -> Int in
return new_M[a >> 3] >> ((1 ^ a & 7) * 4) & 15
})
}
33 changes: 33 additions & 0 deletions validation-test/Sema/type_checker_perf/fast/issue-46680.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -typecheck -solver-scope-threshold=100
// REQUIRES: objc_interop

// https://github.com/swiftlang/swift/issues/46680

import Foundation

// FIXME: This should be a scale-test but it doesn't allow passing `%clang-importer-sdk`

func slow() {
let x = [
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0),
NSNumber(value: 0)
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// RUN: %target-typecheck-verify-swift -solver-scope-threshold=100

// https://github.com/swiftlang/swift/issues/47587

func slow() {
let _ = ["x"].count > 6 + 1 + 4 + 1 + 40 + 1
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// RUN: %scale-test --begin 1 --end 5 --step 1 --select NumLeafScopes %s -Xfrontend=-typecheck
// REQUIRES: asserts, no_asan

// https://github.com/swiftlang/swift/issues/47685

func slow() {
let a = 0

let diff = abs(a - a) + abs(a + a)
%for i in range(0, N):
+ abs(a - a) + abs(a + a)
%end
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// RUN: %scale-test --begin 1 --end 6 --step 1 --select NumLeafScopes %s -Xfrontend=-typecheck
// REQUIRES: asserts, no_asan

// https://github.com/swiftlang/swift/issues/47896

func slow() {
let _ = MemoryLayout<OpaquePointer>.size
%for n in range(0, N):
+ MemoryLayout<Int32>.size + MemoryLayout<UnsafePointer<UInt8>>.size
%end
}

232 changes: 232 additions & 0 deletions validation-test/Sema/type_checker_perf/fast/issue-48155.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
// RUN: %target-typecheck-verify-swift -solver-scope-threshold=500

// https://github.com/swiftlang/swift/issues/48155

public struct MatrixNxM<T> {
var m: [T]
private let xdim : Int
private let ydim : Int

subscript(i: Int, j: Int) -> T {
get {
precondition(i*xdim + j < self.m.count, "Index out of matrix bounds \(i) \(j)")

return self.m[i*xdim + j]
}
set {
self.m[i*xdim + j] = newValue
}
}

public init(xdim: Int, ydim: Int) {
self.xdim = xdim
self.ydim = ydim
self.m = [Any](repeating: 0.0, count: xdim*ydim) as! [T]
}
}

public struct Matrix4x4 {
var m: [Double]

subscript(i: Int, j: Int) -> Double {
get {
precondition(i*4 + j < self.m.count, "Index out of matrix bounds \(i) \(j)")

return self.m[i*4 + j]
}
set {
self.m[i*4 + j] = newValue
}
}

public init() {
m = [Double](repeating: 0.0, count: 16)
}

public static func identity() -> Matrix4x4 {
var identity = Matrix4x4()

identity[0,0] = 1.0;
identity[1,1] = 1.0;
identity[2,2] = 1.0;
identity[3,3] = 1.0;

return identity
}

public func determinant() -> Double {
let det = self[0,0] * self[1,1] * self[2,2] * self[3,3] +
self[0,0] * self[1,2] * self[2,3] * self[3,1] +
self[0,0] * self[1,3] * self[2,1] * self[3,2] +

self[0,1] * self[1,0] * self[2,3] * self[3,2] +
self[0,1] * self[1,2] * self[2,1] * self[3,3] +
self[0,1] * self[1,3] * self[2,2] * self[3,0] +

self[0,2] * self[1,0] * self[2,1] * self[3,3] +
self[0,2] * self[1,1] * self[2,3] * self[3,0] +
self[0,2] * self[1,3] * self[2,0] * self[3,0] +

self[0,3] * self[1,0] * self[2,2] * self[3,1] +
self[0,3] * self[1,1] * self[2,0] * self[3,2] +
self[0,3] * self[1,2] * self[2,1] * self[3,0] -

self[0,0] * self[1,1] * self[2,3] * self[3,2] -
self[0,0] * self[1,2] * self[2,1] * self[3,3] -
self[0,0] * self[1,3] * self[2,2] * self[3,1] -

self[0,1] * self[1,0] * self[2,2] * self[3,3] -
self[0,1] * self[1,2] * self[2,3] * self[3,0] -
self[0,1] * self[1,3] * self[2,0] * self[3,2] -

self[0,2] * self[1,0] * self[2,3] * self[3,1] -
self[0,2] * self[1,1] * self[2,0] * self[3,3] -
self[0,2] * self[1,3] * self[2,1] * self[3,0] -

self[0,3] * self[1,0] * self[2,1] * self[3,2] -
self[0,3] * self[1,1] * self[2,2] * self[3,0] -
self[0,3] * self[1,2] * self[2,0] * self[3,1]

return det
}

public func inverse() -> Matrix4x4 {
let det = self.determinant()
precondition(det != 0, "Determinant is zero, unable to calculate inverse Matrix")

let inv_det = 1.0 / det
var inverse = Matrix4x4()

inverse[0, 0] = (self[1,1] * self[2,2] * self[3,3] +
self[1,2] * self[2,3] * self[3,1] +
self[1,3] * self[2,1] * self[3,2] -
self[1,1] * self[2,3] * self[3,2] -
self[1,2] * self[2,1] * self[3,3] -
self[1,3] * self[2,2] * self[3,1]) * inv_det;

inverse[0, 1] = (self[0,1] * self[2,3] * self[3,2] +
self[0,2] * self[2,1] * self[3,3] +
self[1,3] * self[2,2] * self[3,1] -
self[0,1] * self[2,2] * self[3,3] -
self[0,2] * self[2,3] * self[3,1] -
self[0,3] * self[2,1] * self[3,2]) * inv_det;

inverse[0, 2] = (self[0,1] * self[1,2] * self[3,3] +
self[0,2] * self[1,3] * self[3,1] +
self[0,3] * self[1,1] * self[3,2] -
self[0,1] * self[1,3] * self[3,2] -
self[0,2] * self[1,1] * self[3,3] -
self[0,3] * self[1,2] * self[3,1]) * inv_det;

inverse[0, 3] = (self[0,1] * self[1,3] * self[2,2] +
self[0,2] * self[1,1] * self[2,3] +
self[0,3] * self[1,2] * self[2,1] -
self[0,1] * self[1,2] * self[2,3] -
self[0,2] * self[1,3] * self[2,1] -
self[0,3] * self[1,1] * self[2,2]) * inv_det;

inverse[1, 0] = (self[1,0] * self[2,3] * self[3,2] +
self[1,2] * self[2,0] * self[3,3] +
self[1,3] * self[2,2] * self[3,1] -
self[1,0] * self[2,2] * self[3,3] -
self[1,2] * self[2,3] * self[3,1] -
self[1,3] * self[2,0] * self[3,2]) * inv_det;

inverse[1, 1] = (self[0,0] * self[2,2] * self[3,3] +
self[0,2] * self[2,3] * self[3,1] +
self[0,3] * self[2,0] * self[3,2] -
self[0,0] * self[2,3] * self[3,2] -
self[0,2] * self[2,0] * self[3,3] -
self[0,3] * self[2,2] * self[3,0]) * inv_det;


inverse[1, 2] = (self[0,0] * self[1,3] * self[3,2] +
self[0,2] * self[1,0] * self[3,3] +
self[0,3] * self[1,2] * self[3,1] -
self[0,0] * self[1,2] * self[3,3] -
self[0,2] * self[1,3] * self[3,0] -
self[0,3] * self[1,0] * self[3,2]) * inv_det;

inverse[1, 3] = (self[0,0] * self[1,2] * self[2,3] +
self[0,2] * self[1,3] * self[2,2] +
self[0,3] * self[1,0] * self[2,2] -
self[0,0] * self[1,3] * self[2,2] -
self[0,2] * self[1,0] * self[2,3] -
self[0,3] * self[1,2] * self[2,0]) * inv_det;

inverse[2, 0] = (self[1,0] * self[2,1] * self[3,3] +
self[1,1] * self[2,3] * self[3,1] +
self[1,3] * self[2,1] * self[3,2] -
self[1,0] * self[2,3] * self[3,1] -
self[1,1] * self[2,0] * self[3,3] -
self[1,3] * self[2,1] * self[3,0]) * inv_det;

inverse[2, 1] = (self[0,0] * self[2,3] * self[3,1] +
self[0,1] * self[2,0] * self[3,3] +
self[0,3] * self[2,1] * self[3,1] -
self[0,0] * self[2,1] * self[3,3] -
self[0,1] * self[2,3] * self[3,0] -
self[0,3] * self[2,0] * self[3,1]) * inv_det;

inverse[2, 2] = (self[0,0] * self[1,1] * self[3,3] +
self[0,1] * self[1,3] * self[3,0] +
self[0,3] * self[1,0] * self[3,1] -
self[0,0] * self[1,3] * self[3,1] -
self[0,1] * self[1,0] * self[3,3] -
self[0,3] * self[1,1] * self[3,0]) * inv_det;

inverse[2, 3] = (self[0,0] * self[1,3] * self[2,1] +
self[0,1] * self[1,0] * self[2,3] +
self[0,3] * self[1,1] * self[2,0] -
self[0,0] * self[1,1] * self[2,3] -
self[0,1] * self[1,3] * self[2,0] -
self[0,3] * self[1,0] * self[2,1]) * inv_det;

inverse[3, 0] = (self[1,0] * self[2,2] * self[3,1] +
self[1,1] * self[2,0] * self[3,2] +
self[1,2] * self[2,1] * self[3,0] -
self[1,0] * self[2,1] * self[3,2] -
self[1,1] * self[2,2] * self[3,0] -
self[1,2] * self[2,0] * self[3,1]) * inv_det;

inverse[3, 1] = (self[0,0] * self[2,1] * self[3,2] +
self[0,1] * self[2,2] * self[3,0] +
self[0,2] * self[2,0] * self[3,2] -
self[0,0] * self[2,2] * self[3,1] -
self[0,1] * self[2,0] * self[3,2] -
self[0,2] * self[2,1] * self[3,0]) * inv_det;

inverse[3, 2] = (self[0,0] * self[1,2] * self[3,1] +
self[0,1] * self[1,0] * self[3,2] +
self[0,2] * self[1,1] * self[3,0] -
self[0,0] * self[1,1] * self[3,2] -
self[0,1] * self[1,2] * self[3,0] -
self[0,2] * self[1,0] * self[3,1]) * inv_det;

inverse[3, 3] = (self[0,0] * self[1,1] * self[2,2] +
self[0,1] * self[1,2] * self[2,0] +
self[0,2] * self[2,1] * self[2,1] -
self[0,0] * self[1,2] * self[2,1] -
self[0,1] * self[1,0] * self[2,2] -
self[0,2] * self[1,1] * self[2,0]) * inv_det;

return inverse
}
}

public func * (a: Matrix4x4, b: Matrix4x4) -> Matrix4x4 {
var c = Matrix4x4();

for i in 0..<4 {
for j in 0..<4 {
var ab: Double = 0.0;
for k in 0..<4 {
ab += a[i,k] * b[k,j];
}

c[i, j] = ab;
}
}

return c
}
41 changes: 41 additions & 0 deletions validation-test/Sema/type_checker_perf/fast/issue-48509.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// RUN: %target-typecheck-verify-swift -solver-scope-threshold=100

// https://github.com/swiftlang/swift/issues/48509

struct Calculator {

let tCrit: Double
let predictedValue: ([Double]) -> Double
}

func slow() {
// variable indices
let index1 = 0
let index2 = 1
let index3 = 2

let _ = Calculator(
tCrit: 1.962,
predictedValue: { (parameters: [Double]) -> Double in
return -603 + 123.31 * parameters[index1] + 9.288 * parameters[index2] + 0.316 * parameters[index3]
}
)

let _ = Calculator(
tCrit: 1.962,
predictedValue: { parameters in
-302.908 + 0.162 * parameters[index1] + 3.112 * parameters[index2] + 0.392 * parameters[index3]
})

let _ = Calculator(
tCrit: 1.962,
predictedValue: { parameters in
-992 + 1.312 * parameters[index1] + 1.235 * parameters[index2]
})

let _ = Calculator(
tCrit: 1.962,
predictedValue: { parameters in
-2932.32 + 1.253 * parameters[index1] + 3.212 * parameters[index2]
})
}
Loading