Skip to content

Commit e052955

Browse files
authored
Merge pull request #14792 from atrick/opt-markers
2 parents 86d5ba2 + 5d7d02d commit e052955

File tree

3 files changed

+58
-30
lines changed

3 files changed

+58
-30
lines changed

lib/Frontend/CompilerInvocation.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -528,11 +528,6 @@ void parseExclusivityEnforcementOptions(const llvm::opt::Arg *A,
528528
Diags.diagnose(SourceLoc(), diag::error_unsupported_option_argument,
529529
A->getOption().getPrefixedName(), A->getValue());
530530
}
531-
if (Opts.shouldOptimize() && Opts.EnforceExclusivityDynamic) {
532-
Diags.diagnose(SourceLoc(),
533-
diag::warning_argument_not_supported_with_optimization,
534-
A->getOption().getPrefixedName() + A->getValue());
535-
}
536531
}
537532

538533
static bool ParseSILArgs(SILOptions &Opts, ArgList &Args,

lib/SILOptimizer/Mandatory/AccessMarkerElimination.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ using namespace swift;
3636
// This is currently unsupported because tail duplication results in
3737
// address-type block arguments.
3838
llvm::cl::opt<bool> EnableOptimizedAccessMarkers(
39-
"sil-optimized-access-markers", llvm::cl::init(false),
39+
"sil-optimized-access-markers", llvm::cl::init(true),
4040
llvm::cl::desc("Enable memory access markers during optimization passes."));
4141

4242
namespace {

test/SILOptimizer/access_marker_elim.sil

Lines changed: 57 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
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
23

34
sil_stage raw
45

@@ -11,21 +12,40 @@ public struct S {
1112
init(i: Int)
1213
}
1314

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'
2949
sil hidden [noinline] @f010_initS : $@convention(thin) () -> @owned S {
3050
bb0:
3151
%0 = alloc_box ${ var S }, var, name "s"
@@ -46,14 +66,27 @@ bb0:
4666
// And since inactive elimination currently eliminates all dynamic markers,
4767
// they are gone from the output.
4868
//
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'
5790
sil hidden @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
5891
bb0(%0 : ${ var Builtin.Int64 }):
5992
%1 = project_box %0 : ${ var Builtin.Int64 }, 0

0 commit comments

Comments
 (0)