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