11// 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
44
5- // We expect calls to `Range.contains`, `ClosedRange.contains` and `~=` over a
5+ // We expect calls to `Range.contains`, `ClosedRange.contains` over a
66// `Range` instance to result in direct bound comparisons in all compilation
77// modes, including unoptimized builds. (These are often used to implement
88// bounds checking.)
99//
1010// The sample functions below use bounds of different integer types to avoid
1111// them tail-calling each other.
1212
13- // CHECK-LABEL: define swiftcc i1 @"$s21RangeContainsInlining08halfOpenB0ySbSnys4Int8VG_ADtF"
13+ // CHECK-LABEL: define {{.*}} i1 @"$s21RangeContainsInlining08halfOpenB0ySbSnys4Int8VG_ADtF"
1414// CHECK-NOT: call swiftcc
1515// CHECK: icmp
1616// CHECK-NOT: call swiftcc
@@ -19,7 +19,7 @@ public func halfOpenContains(_ r: Range<Int8>, _ i: Int8) -> Bool {
1919 r. contains ( i)
2020}
2121
22- // CHECK-LABEL: define swiftcc i1 @"$s21RangeContainsInlining06closedB0ySbSNys5Int16VG_ADtF"
22+ // CHECK-LABEL: define {{.*}} i1 @"$s21RangeContainsInlining06closedB0ySbSNys5Int16VG_ADtF"
2323// CHECK-NOT: call swiftcc
2424// CHECK: icmp
2525// CHECK-NOT: call swiftcc
@@ -28,11 +28,14 @@ public func closedContains(_ r: ClosedRange<Int16>, _ i: Int16) -> Bool {
2828 r. contains ( i)
2929}
3030
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: {{^}}}
3639public func halfOpenPatternMatch( _ r: Range < Int32 > , _ i: Int32 ) -> Bool {
3740 r ~= i
3841}
0 commit comments