File: lifetime_dependence.sil

package info (click to toggle)
swiftlang 6.1.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,791,532 kB
  • sloc: cpp: 9,901,743; ansic: 2,201,431; asm: 1,091,827; python: 308,252; objc: 82,166; f90: 80,126; lisp: 38,358; pascal: 25,559; sh: 20,429; ml: 5,058; perl: 4,745; makefile: 4,484; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (80 lines) | stat: -rw-r--r-- 4,390 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// RUN: %target-sil-opt %s \
// RUN:   -enable-experimental-feature LifetimeDependence | %FileCheck %s

// REQUIRES: swift_feature_LifetimeDependence

sil_stage canonical

import Builtin
import Swift

struct BufferView : ~Escapable {
  @_hasStorage let ptr: UnsafeRawBufferPointer { get }
  @lifetime(borrow ptr) @inlinable init(_ ptr: UnsafeRawBufferPointer) 
  @lifetime(borrow a) init(_ ptr: UnsafeRawBufferPointer, _ a: borrowing Array<Int>) 
}

@lifetime(borrow x) 
func derive(_ x: borrowing BufferView) -> BufferView

@lifetime(x) 
func consumeAndCreate(_ x: consuming BufferView) -> BufferView

sil hidden [unsafe_nonescapable_result] @bufferviewinit1 : $@convention(method) (UnsafeRawBufferPointer, @thin BufferView.Type) -> @owned BufferView {
bb0(%0 : $UnsafeRawBufferPointer, %1 : $@thin BufferView.Type):
  %2 = alloc_stack [var_decl] $BufferView, var, name "self"
  debug_value %0 : $UnsafeRawBufferPointer, let, name "ptr", argno 1 
  %4 = begin_access [modify] [static] %2 : $*BufferView 
  %5 = struct_element_addr %4 : $*BufferView, #BufferView.ptr 
  store %0 to %5 : $*UnsafeRawBufferPointer       
  end_access %4 : $*BufferView                    
  %8 = struct $BufferView (%0 : $UnsafeRawBufferPointer) 
  destroy_addr %2 : $*BufferView                  
  dealloc_stack %2 : $*BufferView                 
  return %8 : $BufferView                         
} 

// CHECK-LABEL: sil hidden @bufferviewtest2 : $@convention(method) (UnsafeRawBufferPointer, @guaranteed Array<Int>, @thin BufferView.Type) -> @lifetime(borrow 1) @owned BufferView {
sil hidden @bufferviewtest2 : $@convention(method) (UnsafeRawBufferPointer, @guaranteed Array<Int>, @thin BufferView.Type) -> @lifetime(borrow 1) @owned BufferView {
bb0(%0 : $UnsafeRawBufferPointer, %1 : @noImplicitCopy $Array<Int>, %2 : $@thin BufferView.Type):
  %3 = alloc_stack [var_decl] $BufferView, var, name "self"
  %6 = begin_access [modify] [static] %3 : $*BufferView 
  %7 = struct_element_addr %6 : $*BufferView, #BufferView.ptr 
  store %0 to %7 : $*UnsafeRawBufferPointer       
  end_access %6 : $*BufferView                    
  %10 = struct $BufferView (%0 : $UnsafeRawBufferPointer) 
  destroy_addr %3 : $*BufferView                  
  dealloc_stack %3 : $*BufferView                 
  return %10 : $BufferView                        
} 

// CHECK-LABEL: sil hidden @derive : $@convention(thin) (@guaranteed BufferView) -> @lifetime(borrow 0) @owned BufferView {
sil hidden @derive : $@convention(thin) (@guaranteed BufferView) -> @lifetime(borrow 0) @owned BufferView {
bb0(%0 : @noImplicitCopy $BufferView):
  %2 = metatype $@thin BufferView.Type            
  %3 = struct_extract %0 : $BufferView, #BufferView.ptr 
  %4 = function_ref @bufferviewinit1 : $@convention(method) (UnsafeRawBufferPointer, @thin BufferView.Type) -> @owned BufferView 
  %5 = apply %4(%3, %2) : $@convention(method) (UnsafeRawBufferPointer, @thin BufferView.Type) -> @owned BufferView 
  return %5 : $BufferView                         
} 

// CHECK-LABEL: sil hidden @consumeAndCreate : $@convention(thin) (@owned BufferView) -> @lifetime(copy 0) @owned BufferView {
sil hidden @consumeAndCreate : $@convention(thin) (@owned BufferView) -> @lifetime(copy 0) @owned BufferView {
bb0(%0 : @noImplicitCopy @_eagerMove $BufferView):
  %1 = alloc_stack [var_decl] [moveable_value_debuginfo] $BufferView, var, name "x" 
  %2 = struct_extract %0 : $BufferView, #BufferView.ptr 
  %3 = struct_extract %2 : $UnsafeRawBufferPointer, #UnsafeRawBufferPointer._position 
  %4 = struct_extract %0 : $BufferView, #BufferView.ptr 
  %5 = struct_extract %4 : $UnsafeRawBufferPointer, #UnsafeRawBufferPointer._end 
  store %0 to %1 : $*BufferView                   
  %7 = metatype $@thin BufferView.Type            
  %8 = begin_access [read] [static] %1 : $*BufferView 
  %9 = struct $UnsafeRawBufferPointer (%3 : $Optional<UnsafeRawPointer>, %5 : $Optional<UnsafeRawPointer>) 
  end_access %8 : $*BufferView                    
  %11 = function_ref @bufferviewinit1 : $@convention(method) (UnsafeRawBufferPointer, @thin BufferView.Type) -> @owned BufferView 
  %12 = apply %11(%9, %7) : $@convention(method) (UnsafeRawBufferPointer, @thin BufferView.Type) -> @owned BufferView 
  destroy_addr %1 : $*BufferView                  
  dealloc_stack %1 : $*BufferView                 
  return %12 : $BufferView                        
}