|
| 1 | +// RUN: %target-swift-emit-silgen -module-name main %s -define-availability 'InlineArray 0.1:macOS 9999, iOS 9999, watchOS 9999, tvOS 9999, visionOS 9999' | %FileCheck %s |
| 2 | + |
| 3 | +@available(InlineArray 0.1, *) |
| 4 | +struct S { |
| 5 | + var a: InlineArray<40, Int> = .init(repeating: 0) |
| 6 | + |
| 7 | + // CHECK-LABEL: sil {{.*}} @$s{{.*}}1SV1f |
| 8 | + mutating func f(x: inout Int, y: Int) { |
| 9 | + // CHECK: bb0({{.*}}, [[SELF:%.*]] : $*S): |
| 10 | + // CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[SELF]] |
| 11 | + // CHECK: [[ADDRESSOR:%.*]] = function_ref @$s{{.*}}11InlineArrayV |
| 12 | + // CHECK: [[PTR:%.*]] = apply [[ADDRESSOR]] |
| 13 | + // CHECK: [[RAWPTR:%.*]] = struct_extract [[PTR]] |
| 14 | + // CHECK: [[ADDR:%.*]] = pointer_to_address [[RAWPTR]] |
| 15 | + // CHECK: [[DEP:%.*]] = mark_dependence [unresolved] [[ADDR]] |
| 16 | + // CHECK: [[ADDR_ACCESS:%.*]] = begin_access [read] [unsafe] [[DEP]] |
| 17 | + // CHECK: load [trivial] [[ADDR_ACCESS]] |
| 18 | + // CHECK: end_access [[ADDR_ACCESS]] |
| 19 | + // CHECK: end_access [[ACCESS]] |
| 20 | + x += a[y] |
| 21 | + } |
| 22 | +} |
| 23 | + |
| 24 | +@available(InlineArray 0.1, *) |
| 25 | +final class C { |
| 26 | + final var a: InlineArray<40, Int> = .init(repeating: 0) |
| 27 | + |
| 28 | + // CHECK-LABEL: sil {{.*}} @$s{{.*}}1CC1f |
| 29 | + func f(x: inout Int, y: Int) { |
| 30 | + // CHECK: bb0({{.*}}, [[SELF:%.*]] : @guaranteed $C): |
| 31 | + // CHECK: [[FIELD:%.*]] = ref_element_addr [[SELF]] |
| 32 | + // CHECK: [[ACCESS:%.*]] = begin_access [read] [dynamic] [[FIELD]] |
| 33 | + // CHECK: [[ADDRESSOR:%.*]] = function_ref @$s{{.*}}11InlineArrayV |
| 34 | + // CHECK: [[PTR:%.*]] = apply [[ADDRESSOR]] |
| 35 | + // CHECK: [[RAWPTR:%.*]] = struct_extract [[PTR]] |
| 36 | + // CHECK: [[ADDR:%.*]] = pointer_to_address [[RAWPTR]] |
| 37 | + // CHECK: [[DEP:%.*]] = mark_dependence [unresolved] [[ADDR]] |
| 38 | + // CHECK: [[ADDR_ACCESS:%.*]] = begin_access [read] [unsafe] [[DEP]] |
| 39 | + // CHECK: load [trivial] [[ADDR_ACCESS]] |
| 40 | + // CHECK: end_access [[ADDR_ACCESS]] |
| 41 | + // CHECK: end_access [[ACCESS]] |
| 42 | + x += a[y] |
| 43 | + } |
| 44 | +} |
| 45 | + |
| 46 | +// CHECK-LABEL: sil {{.*}} @$s{{.*}}6tupleF |
| 47 | +@available(InlineArray 0.1, *) |
| 48 | +func tupleF(tuple: inout (Int, InlineArray<40, Int>), x: inout Int, y: Int) { |
| 49 | + // CHECK: bb0([[TUPLE:%.*]] : $*(Int, InlineArray<40, Int>) |
| 50 | + // CHECK: [[ACCESS:%.*]] = begin_access [read] [unknown] [[TUPLE]] |
| 51 | + // CHECK: [[ADDRESSOR:%.*]] = function_ref @$s{{.*}}11InlineArrayV |
| 52 | + // CHECK: [[PTR:%.*]] = apply [[ADDRESSOR]] |
| 53 | + // CHECK: [[RAWPTR:%.*]] = struct_extract [[PTR]] |
| 54 | + // CHECK: [[ADDR:%.*]] = pointer_to_address [[RAWPTR]] |
| 55 | + // CHECK: [[DEP:%.*]] = mark_dependence [unresolved] [[ADDR]] |
| 56 | + // CHECK: [[ADDR_ACCESS:%.*]] = begin_access [read] [unsafe] [[DEP]] |
| 57 | + // CHECK: load [trivial] [[ADDR_ACCESS]] |
| 58 | + // CHECK: end_access [[ADDR_ACCESS]] |
| 59 | + // CHECK: end_access [[ACCESS]] |
| 60 | + x += tuple.1[y] |
| 61 | +} |
| 62 | + |
| 63 | +@available(InlineArray 0.1, *) |
| 64 | +protocol P { |
| 65 | + var a: InlineArray<40, Int> { get set } |
| 66 | +} |
| 67 | + |
| 68 | +// CHECK-LABEL: sil {{.*}} @$s{{.*}}12existentialF |
| 69 | +@available(InlineArray 0.1, *) |
| 70 | +func existentialF(e: inout P, x: inout Int, y: Int) { |
| 71 | + // CHECK: [[TEMP:%.*]] = alloc_stack $InlineArray |
| 72 | + // CHECK: [[ADDRESSOR:%.*]] = function_ref @$s{{.*}}11InlineArrayV |
| 73 | + // CHECK: [[PTR:%.*]] = apply [[ADDRESSOR]] |
| 74 | + // CHECK: [[RAWPTR:%.*]] = struct_extract [[PTR]] |
| 75 | + // CHECK: [[ADDR:%.*]] = pointer_to_address [[RAWPTR]] |
| 76 | + // CHECK: [[DEP:%.*]] = mark_dependence [unresolved] [[ADDR]] |
| 77 | + // CHECK: [[ADDR_ACCESS:%.*]] = begin_access [read] [unsafe] [[DEP]] |
| 78 | + // CHECK: load [trivial] [[ADDR_ACCESS]] |
| 79 | + // CHECK: end_access [[ADDR_ACCESS]] |
| 80 | + // CHECK: dealloc_stack [[TEMP]] |
| 81 | + x += e.a[y] |
| 82 | +} |
0 commit comments