1
- // RUN: %target-sil-opt -enforce-exclusivity=checked -emit-sorted-sil -access-marker-elim %s | %FileCheck %s
1
+ // RUN: %target-sil-opt -enforce-exclusivity=unchecked -emit-sorted-sil -access-marker-elim %s | %FileCheck %s --check-prefix=UNCHECKED
2
+ // RUN: %target-sil-opt -enforce-exclusivity=checked -emit-sorted-sil -access-marker-elim %s | %FileCheck %s --check-prefix=CHECKED
2
3
3
4
sil_stage raw
4
5
@@ -11,21 +12,40 @@ public struct S {
11
12
init(i: Int)
12
13
}
13
14
14
- // CHECK-LABEL: sil hidden [noinline] @f010_initS : $@convention(thin) () -> @owned S {
15
- // CHECK: bb0:
16
- // CHECK: %[[BOX:.*]] = alloc_box ${ var S }, var, name "s"
17
- // CHECK: %[[ADDRS:.*]] = project_box %[[BOX]] : ${ var S }, 0
18
- // CHECK: %[[NUM:.*]] = integer_literal $Builtin.Int64, 1
19
- // CHECK-NOT: begin_access
20
- // CHECK: %[[ADDRI:.*]] = struct_element_addr %[[ADDRS]] : $*S, #S.i
21
- // CHECK: assign %[[NUM]] to %[[ADDRI]] : $*Builtin.Int64
22
- // CHECK-NOT: end_access
23
- // CHECK-NOT: begin_access
24
- // CHECK: %[[VALS:.*]] = load [trivial] %[[ADDRS]] : $*S
25
- // CHECK-NOT: end_access
26
- // CHECK: destroy_value %[[BOX]] : ${ var S }
27
- // CHECK: return %[[VALS]] : $S
28
- // CHECK-LABEL: } // end sil function 'f010_initS'
15
+ // [unknown] markers are treated like [dynamic] markers by AccessMarkerElimination.
16
+ // We don't remove them for -enforce-exclusivity=checked
17
+
18
+ // UNCHECKED-LABEL: sil hidden [noinline] @f010_initS : $@convention(thin) () -> @owned S {
19
+ // UNCHECKED: bb0:
20
+ // UNCHECKED: [[BOX:%.*]] = alloc_box ${ var S }, var, name "s"
21
+ // UNCHECKED: [[ADDRS:%.*]] = project_box [[BOX]] : ${ var S }, 0
22
+ // UNCHECKED: [[NUM:%.*]] = integer_literal $Builtin.Int64, 1
23
+ // UNCHECKED-NOT: begin_access
24
+ // UNCHECKED: [[ADDRI:%.*]] = struct_element_addr [[ADDRS]] : $*S, #S.i
25
+ // UNCHECKED: assign [[NUM]] to [[ADDRI]] : $*Builtin.Int64
26
+ // UNCHECKED-NOT: end_access
27
+ // UNCHECKED-NOT: begin_access
28
+ // UNCHECKED: [[VALS:%.*]] = load [trivial] [[ADDRS]] : $*S
29
+ // UNCHECKED-NOT: end_access
30
+ // UNCHECKED: destroy_value [[BOX]] : ${ var S }
31
+ // UNCHECKED: return [[VALS]] : $S
32
+ // UNCHECKED-LABEL: } // end sil function 'f010_initS'
33
+ //
34
+ // CHECKED-LABEL: sil hidden [noinline] @f010_initS : $@convention(thin) () -> @owned S {
35
+ // CHECKED: bb0:
36
+ // CHECKED: [[BOX:%.*]] = alloc_box ${ var S }, var, name "s"
37
+ // CHECKED: [[ADDRS:%.*]] = project_box [[BOX]] : ${ var S }, 0
38
+ // CHECKED: [[NUM:%.*]] = integer_literal $Builtin.Int64, 1
39
+ // CHECKED: [[ACCESS:%.*]] = begin_access [modify] [unknown] [[ADDRS]]
40
+ // CHECKED: [[ADDRI:%.*]] = struct_element_addr [[ACCESS]] : $*S, #S.i
41
+ // CHECKED: assign [[NUM]] to [[ADDRI]] : $*Builtin.Int64
42
+ // CHECKED: end_access [[ACCESS]]
43
+ // CHECKED: [[ACCESS:%.*]] = begin_access [read] [unknown] [[ADDRS]]
44
+ // CHECKED: [[VALS:%.*]] = load [trivial] [[ACCESS]] : $*S
45
+ // CHECKED: end_access [[ACCESS]]
46
+ // CHECKED: destroy_value [[BOX]] : ${ var S }
47
+ // CHECKED: return [[VALS]] : $S
48
+ // CHECKED-LABEL: } // end sil function 'f010_initS'
29
49
sil hidden [noinline] @f010_initS : $@convention(thin) () -> @owned S {
30
50
bb0:
31
51
%0 = alloc_box ${ var S }, var, name "s"
46
66
// And since inactive elimination currently eliminates all dynamic markers,
47
67
// they are gone from the output.
48
68
//
49
- // CHECK-LABEL: sil hidden @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
50
- // CHECK: bb0(%0 : ${ var Builtin.Int64 }):
51
- // CHECK: [[ADR:%.*]] = project_box %0 : ${ var Builtin.Int64 }, 0
52
- // CHECK: [[VAL:%.*]] = integer_literal $Builtin.Int64, 42
53
- // CHECK: store [[VAL]] to [trivial] [[ADR]] : $*Builtin.Int64
54
- // CHECK: destroy_value %0 : ${ var Builtin.Int64 }
55
- // CHECK: return %{{.*}} : $()
56
- // CHECK-LABEL: } // end sil function 'f020_boxArg'
69
+ // UNCHECKED-LABEL: sil hidden @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
70
+ // UNCHECKED: bb0(%0 : ${ var Builtin.Int64 }):
71
+ // UNCHECKED: [[ADR:%.*]] = project_box %0 : ${ var Builtin.Int64 }, 0
72
+ // UNCHECKED: [[VAL:%.*]] = integer_literal $Builtin.Int64, 42
73
+ // UNCHECKED-NOT: begin_access
74
+ // UNCHECKED: store [[VAL]] to [trivial] [[ADR]] : $*Builtin.Int64
75
+ // UNCHECKED-NOT: end_access
76
+ // UNCHECKED: destroy_value %0 : ${ var Builtin.Int64 }
77
+ // UNCHECKED: return %{{.*}} : $()
78
+ // UNCHECKED-LABEL: } // end sil function 'f020_boxArg'
79
+ //
80
+ // CHECKED-LABEL: sil hidden @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
81
+ // CHECKED: bb0(%0 : ${ var Builtin.Int64 }):
82
+ // CHECKED: [[ADR:%.*]] = project_box %0 : ${ var Builtin.Int64 }, 0
83
+ // CHECKED: [[VAL:%.*]] = integer_literal $Builtin.Int64, 42
84
+ // CHECKED: [[ACCESS:%.*]] = begin_access [modify] [unknown] [[ADR]]
85
+ // CHECKED: store [[VAL]] to [trivial] [[ACCESS]] : $*Builtin.Int64
86
+ // CHECKED: end_access [[ACCESS]]
87
+ // CHECKED: destroy_value %0 : ${ var Builtin.Int64 }
88
+ // CHECKED: return %{{.*}} : $()
89
+ // CHECKED-LABEL: } // end sil function 'f020_boxArg'
57
90
sil hidden @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
58
91
bb0(%0 : ${ var Builtin.Int64 }):
59
92
%1 = project_box %0 : ${ var Builtin.Int64 }, 0
0 commit comments