|
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