File: boxes.sil

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (109 lines) | stat: -rw-r--r-- 4,244 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// RUN: %target-swift-frontend -emit-silgen %s | %FileCheck %s

sil_stage raw

import Swift

protocol P {}
struct F {}
struct G: P {}
struct Q: P {}

// TODO: Transform boxes by transforming their arguments, not as single-field,
// so that they work as parameters in generic SIL functions.
// CHECK-LABEL: sil [ossa] @box_type_parsing : $@convention(thin) (
sil [ossa] @box_type_parsing : $@convention(thin) (
  // CHECK: <τ_0_0> { var τ_0_0 } <F>,
  <B>{ var B }<F>,
  // CHECK: <τ_0_0 where τ_0_0 : P> { let τ_0_0 } <G>,
  <C: P>{ let C }<G>,
  // CHECK: <τ_0_0 where τ_0_0 : P> { var τ_0_0 } <Q>,
  <D: P>{ var D }<Q>,
  // CHECK: { let Int },
  { let Int },
  // CHECK: { var Int, let String },
  { var Int, let String },
  // CHECK: { },
  {},
  // CHECK: <τ_0_0, τ_0_1, τ_0_2> { var τ_0_0, let τ_0_2 } <Int, String, Optional<Double>>
  <X, Y, Z>{ var X, let Z }<Int, String, Optional<Double>>
// CHECK: ) -> ()
) -> () {
entry(%0 : @unowned $<E>{ var E }<F>, %1 : @unowned $<F: P>{ let F }<G>, %2 : @unowned $<G: P>{ var G }<Q>, %3 : @unowned ${ let Int }, %4 : @unowned ${ var Int, let String }, %5 : @unowned ${}, %6 : @unowned $<XX, YY, ZZ>{ var XX, let ZZ }<Int, String, Optional<Double>>):
  unreachable
}

// CHECK-LABEL: sil [ossa] @box_type_parsing_in_generic_function : $@convention(thin) <F, G where G : P> (
sil [ossa] @box_type_parsing_in_generic_function : $@convention(thin) <F, G: P> (
  // CHECK: <τ_0_0> { var τ_0_0 } <F>,
  <B>{ var B }<F>,
  // CHECK: <τ_0_0 where τ_0_0 : P> { let τ_0_0 } <G>,
  <C: P>{ let C }<G>,
  // CHECK: <τ_0_0 where τ_0_0 : P> { var τ_0_0 } <Q>,
  <D: P>{ var D }<Q>,
  // CHECK: { let Int },
  { let Int },
  // CHECK: { var Int, let String },
  { var Int, let String },
  // CHECK: { },
  {},
  // CHECK: <τ_0_0, τ_0_1, τ_0_2> { var τ_0_0, let τ_0_2 } <Int, String, Optional<Double>>
  <X, Y, Z>{ var X, let Z }<Int, String, Optional<Double>>
// CHECK: ) -> ()
) -> () {
entry(%0 : @unowned $<E>{ var E }<F>, %1 : @unowned $<F: P>{ let F }<G>, %2 : @unowned $<G: P>{ var G }<Q>, %3 : @unowned ${ let Int }, %4 : @unowned ${ var Int, let String }, %5 : @unowned ${}, %6 : @unowned $<XX, YY, ZZ>{ var XX, let ZZ }<Int, String, Optional<Double>>):
  unreachable
}

// CHECK-LABEL: sil [ossa] @same_generic_param_name_in_multiple_box_signatures : $@convention(thin) (
sil [ossa] @same_generic_param_name_in_multiple_box_signatures : $@convention(thin) (
  // CHECK: <τ_0_0> { var τ_0_0 } <Int>,
  <A> { var A } <Int>,
  // CHECK: <τ_0_0> { var τ_0_0 } <String>
  <A> { var A } <String>
// CHECK: ) -> ()
) -> () {
entry(%0 : @unowned $<A> { var A } <Int>, %1 : @unowned $<A> { var A } <String>):
  unreachable
}

// CHECK-LABEL: sil [ossa] @same_generic_param_name_in_outer_scope : $@convention(thin) <A> (
sil [ossa] @same_generic_param_name_in_outer_scope : $@convention(thin) <A> (
  // CHECK: <τ_0_0> { var τ_0_0 } <A>
  <A> { var A } <A>
// CHECK: ) -> ()
) -> () {
entry(%0 : @unowned $<B> { var B } <A>):
  unreachable
}

// CHECK-LABEL: sil [ossa] @box_ownership : $@convention(thin) (@owned { var Int }, @guaranteed <τ_0_0> { let τ_0_0 } <Int>) -> ()
sil [ossa] @box_ownership : $@convention(thin) (@owned { var Int }, @guaranteed <T> { let T } <Int>) -> () {
entry(%0 : @owned ${ var Int }, %1 : @guaranteed $<T> { let T } <Int>):
  unreachable
}

// CHECK-LABEL: sil [ossa] @address_of_box
sil [ossa] @address_of_box : $@convention(thin) (@in { var Int }, @in <T> { let T } <Int>) -> () {
// CHECK: %0 : $*{ var Int }, %1 : $*<τ_0_0> { let τ_0_0 } <Int>
entry(%0 : $*{ var Int }, %1 : $*<T> { let T } <Int>):
  unreachable
}

// CHECK-LABEL: sil [ossa] @alloc_box_attrs
sil [ossa] @alloc_box_attrs : $@convention(thin) () -> () {
entry:
  // CHECK: %0 = alloc_box $
  %0 = alloc_box ${ let Int }
  // CHECK: %1 = alloc_box [dynamic_lifetime] $
  %1 = alloc_box [dynamic_lifetime] ${ let Int }
  // CHECK: %2 = alloc_box [reflection] $
  %2 = alloc_box [reflection] ${ let Int }
  // CHECK: %3 = alloc_box [dynamic_lifetime] [reflection] $
  %3 = alloc_box [dynamic_lifetime] [reflection] ${ let Int }
  dealloc_box %3: ${ let Int }
  dealloc_box %2: ${ let Int }
  dealloc_box %1: ${ let Int }
  dealloc_box %0: ${ let Int }
  return undef : $()
}