Skip to content

Commit 6d6165a

Browse files
committed
SILOptimizer: Recognize globalinit once functions using an attribute instead of symbol name matching
1 parent d82a767 commit 6d6165a

File tree

7 files changed

+13
-13
lines changed

7 files changed

+13
-13
lines changed

lib/SIL/IR/SILGlobalVariable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ SILFunction *swift::findInitializer(SILFunction *AddrF,
272272
if (!CallToOnce)
273273
return nullptr;
274274
SILFunction *callee = getCalleeOfOnceCall(CallToOnce);
275-
if (!callee->getName().startswith("globalinit_"))
275+
if (!callee->isGlobalInitOnceFunction())
276276
return nullptr;
277277
return callee;
278278
}

lib/SILOptimizer/ARC/ARCLoopOpts.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class ARCLoopOpts : public SILFunctionTransform {
4747
return;
4848

4949
// Skip global init functions.
50-
if (F->getName().startswith("globalinit_"))
50+
if (F->isGlobalInitOnceFunction())
5151
return;
5252

5353
auto *LA = getAnalysis<SILLoopAnalysis>();

lib/SILOptimizer/ARC/ARCSequenceOpts.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ processFunctionWithoutLoopSupport(SILFunction &F, bool FreezePostDomReleases,
183183
// globalinit_func. Since that is not *that* interesting from an ARC
184184
// perspective (i.e. no ref count operations in a loop), disable it on such
185185
// functions temporarily in order to unblock others. This should be removed.
186-
if (F.getName().startswith("globalinit_"))
186+
if (F.isGlobalInitOnceFunction())
187187
return false;
188188

189189
LLVM_DEBUG(llvm::dbgs() << "***** Processing " << F.getName() << " *****\n");
@@ -231,7 +231,7 @@ static bool processFunctionWithLoopSupport(
231231
// globalinit_func. Since that is not *that* interesting from an ARC
232232
// perspective (i.e. no ref count operations in a loop), disable it on such
233233
// functions temporarily in order to unblock others. This should be removed.
234-
if (F.getName().startswith("globalinit_"))
234+
if (F.isGlobalInitOnceFunction())
235235
return false;
236236

237237
LLVM_DEBUG(llvm::dbgs() << "***** Processing " << F.getName() << " *****\n");

lib/SILOptimizer/IPO/GlobalOpt.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ void SILGlobalOpt::collectOnceCall(BuiltinInst *BI) {
260260
UnhandledOnceCallee = true;
261261
return;
262262
}
263-
if (!Callee->getName().startswith("globalinit_"))
263+
if (!Callee->isGlobalInitOnceFunction())
264264
return;
265265

266266
// We currently disable optimizing the initializer if a globalinit_func

test/SILOptimizer/globalopt_trivial_nontrivial.sil

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ sil_global private @globalinit_nontrivialglobal_token : $Builtin.Word
3838

3939
sil_global hidden [let] @$nontrivialglobal : $TClass
4040

41-
sil private @globalinit_trivialglobal_func : $@convention(c) () -> () {
41+
sil private [global_init_once_fn] @globalinit_trivialglobal_func : $@convention(c) () -> () {
4242
bb0:
4343
alloc_global @$trivialglobal
4444
%1 = global_addr @$trivialglobal : $*TStruct
@@ -83,13 +83,13 @@ bb0:
8383
return %4 : $Int32
8484
}
8585

86-
// CHECK-LABEL: sil private @globalinit_nontrivialglobal_func :
86+
// CHECK-LABEL: sil private [global_init_once_fn] @globalinit_nontrivialglobal_func :
8787
// CHECK: alloc_global @$nontrivialglobal
8888
// CHECK: [[GLOBL_ADDR:%.*]] = global_addr @$nontrivialglobal : $*TClass
8989
// CHECK: [[REF:%.*]] = alloc_ref $TClass
9090
// CHECK: store [[REF]] to [[GLOBL_ADDR]] : $*TClass
9191
// CHECK: } // end sil function 'globalinit_nontrivialglobal_func'
92-
sil private @globalinit_nontrivialglobal_func : $@convention(c) () -> () {
92+
sil private [global_init_once_fn] @globalinit_nontrivialglobal_func : $@convention(c) () -> () {
9393
bb0:
9494
alloc_global @$nontrivialglobal
9595
%1 = global_addr @$nontrivialglobal : $*TClass

test/SILOptimizer/globalopt_trivial_nontrivial_ossa.sil

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ sil_global private @globalinit_nontrivialglobal_token : $Builtin.Word
3232

3333
sil_global hidden [let] @$nontrivialglobal : $TClass
3434

35-
sil private [ossa] @globalinit_trivialglobal_func : $@convention(c) () -> () {
35+
sil private [global_init_once_fn] [ossa] @globalinit_trivialglobal_func : $@convention(c) () -> () {
3636
bb0:
3737
alloc_global @$trivialglobal
3838
%1 = global_addr @$trivialglobal : $*TStruct
@@ -75,13 +75,13 @@ bb0:
7575
return %4 : $Int32
7676
}
7777

78-
// CHECK-LABEL: sil private [ossa] @globalinit_nontrivialglobal_func :
78+
// CHECK-LABEL: sil private [global_init_once_fn] [ossa] @globalinit_nontrivialglobal_func :
7979
// CHECK: alloc_global @$nontrivialglobal
8080
// CHECK: [[GLOBL_ADDR:%.*]] = global_addr @$nontrivialglobal : $*TClass
8181
// CHECK: [[REF:%.*]] = alloc_ref $TClass
8282
// CHECK: store [[REF]] to [init] [[GLOBL_ADDR]] : $*TClass
8383
// CHECK: } // end sil function 'globalinit_nontrivialglobal_func'
84-
sil private [ossa] @globalinit_nontrivialglobal_func : $@convention(c) () -> () {
84+
sil private [global_init_once_fn] [ossa] @globalinit_nontrivialglobal_func : $@convention(c) () -> () {
8585
bb0:
8686
alloc_global @$nontrivialglobal
8787
%1 = global_addr @$nontrivialglobal : $*TClass

test/SILOptimizer/static_initializer.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ sil_global private @globalinit_token0 : $Builtin.Word
2525
// CHECK-NEXT: }
2626
sil_global @_Tv2ch1xSi : $Outer
2727

28-
// CHECK-LABEL: sil private @globalinit_func0 : $@convention(c) () -> () {
29-
sil private @globalinit_func0 : $@convention(c) () -> () {
28+
// CHECK-LABEL: sil private [global_init_once_fn] @globalinit_func0 : $@convention(c) () -> () {
29+
sil private [global_init_once_fn] @globalinit_func0 : $@convention(c) () -> () {
3030
bb0:
3131
%0 = global_addr @_Tv2ch1xSi : $*Outer
3232
%1 = integer_literal $Builtin.Int32, 2

0 commit comments

Comments
 (0)