1
1
// RUN: %target-swift-emit-ir -primary-file %s 2>&1 | %FileCheck %s
2
- // RUN: %target-swift-emit-ir -primary-file %s -O 2>&1 | %FileCheck %s
3
- // RUN: %target-swift-emit-ir -primary-file %s -Osize 2>&1 | %FileCheck %s
2
+ // RUN: %target-swift-emit-ir -primary-file %s -O 2>&1 | %FileCheck --check-prefixes CHECK,CHECK-OPTIMIZED %s
3
+ // RUN: %target-swift-emit-ir -primary-file %s -Osize 2>&1 | %FileCheck --check-prefixes CHECK,CHECK-OPTIMIZED %s
4
4
5
- // We expect calls to `Range.contains`, `ClosedRange.contains` and `~=` over a
5
+ // We expect calls to `Range.contains`, `ClosedRange.contains` over a
6
6
// `Range` instance to result in direct bound comparisons in all compilation
7
7
// modes, including unoptimized builds. (These are often used to implement
8
8
// bounds checking.)
9
9
//
10
10
// The sample functions below use bounds of different integer types to avoid
11
11
// them tail-calling each other.
12
12
13
- // CHECK-LABEL: define swiftcc i1 @"$s21RangeContainsInlining08halfOpenB0ySbSnys4Int8VG_ADtF"
13
+ // CHECK-LABEL: define {{.*}} i1 @"$s21RangeContainsInlining08halfOpenB0ySbSnys4Int8VG_ADtF"
14
14
// CHECK-NOT: call swiftcc
15
15
// CHECK: icmp
16
16
// CHECK-NOT: call swiftcc
@@ -19,7 +19,7 @@ public func halfOpenContains(_ r: Range<Int8>, _ i: Int8) -> Bool {
19
19
r. contains ( i)
20
20
}
21
21
22
- // CHECK-LABEL: define swiftcc i1 @"$s21RangeContainsInlining06closedB0ySbSNys5Int16VG_ADtF"
22
+ // CHECK-LABEL: define {{.*}} i1 @"$s21RangeContainsInlining06closedB0ySbSNys5Int16VG_ADtF"
23
23
// CHECK-NOT: call swiftcc
24
24
// CHECK: icmp
25
25
// CHECK-NOT: call swiftcc
@@ -28,11 +28,14 @@ public func closedContains(_ r: ClosedRange<Int16>, _ i: Int16) -> Bool {
28
28
r. contains ( i)
29
29
}
30
30
31
- // CHECK-LABEL: define swiftcc i1 @"$s21RangeContainsInlining20halfOpenPatternMatchySbSnys5Int32VG_ADtF"
32
- // CHECK-NOT: call swiftcc
33
- // CHECK: icmp
34
- // CHECK-NOT: call swiftcc
35
- // CHECK-LABEL: {{^}}}
31
+ // `Range.~=` is only marked `@inline(__always)`; unfortunately it doesn't get
32
+ // inlined in deug builds.
33
+
34
+ // CHECK-OPTIMIZED-LABEL: define {{.*}} i1 @"$s21RangeContainsInlining20halfOpenPatternMatchySbSnys5Int32VG_ADtF"
35
+ // CHECK-OPTIMIZED-NOT: call swiftcc
36
+ // CHECK-OPTIMIZED: icmp
37
+ // CHECK-OPTIMIZED-NOT: call swiftcc
38
+ // CHECK-OPTIMIZED-LABEL: {{^}}}
36
39
public func halfOpenPatternMatch( _ r: Range < Int32 > , _ i: Int32 ) -> Bool {
37
40
r ~= i
38
41
}
0 commit comments