Skip to content

Commit 18af945

Browse files
authored
Merge pull request swiftlang#33545 from gottesmm/pr-6574d4de544193a4d6c09072d5450e264677fd7f
[opt-remark] Skip implicit top level functions and autogenerated compiler functions.
2 parents beb11c1 + ac5016b commit 18af945

File tree

3 files changed

+40
-15
lines changed

3 files changed

+40
-15
lines changed

lib/SILOptimizer/Transforms/OptRemarkGenerator.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,17 @@
3030
#include "swift/SILOptimizer/Analysis/RCIdentityAnalysis.h"
3131
#include "swift/SILOptimizer/PassManager/Passes.h"
3232
#include "swift/SILOptimizer/PassManager/Transforms.h"
33+
#include "llvm/Support/CommandLine.h"
3334
#include "llvm/Support/raw_ostream.h"
3435

3536
using namespace swift;
3637

38+
static llvm::cl::opt<bool> ForceVisitImplicitAutogeneratedFunctions(
39+
"optremarkgen-visit-implicit-autogen-funcs", llvm::cl::Hidden,
40+
llvm::cl::desc(
41+
"Emit opt remarks even on implicit and autogenerated functions"),
42+
llvm::cl::init(false));
43+
3744
//===----------------------------------------------------------------------===//
3845
// Utility
3946
//===----------------------------------------------------------------------===//
@@ -347,6 +354,21 @@ class OptRemarkGenerator : public SILFunctionTransform {
347354
return;
348355

349356
auto *fn = getFunction();
357+
358+
// Skip top level implicit functions and top level autogenerated functions,
359+
// unless we were asked by the user to emit them.
360+
if (!ForceVisitImplicitAutogeneratedFunctions) {
361+
// Skip implicit functions generated by Sema.
362+
if (auto *ctx = fn->getDeclContext())
363+
if (auto *decl = ctx->getAsDecl())
364+
if (decl->isImplicit())
365+
return;
366+
// Skip autogenerated functions generated by SILGen.
367+
if (auto loc = fn->getDebugScope()->getLoc())
368+
if (loc.isAutoGenerated())
369+
return;
370+
}
371+
350372
LLVM_DEBUG(llvm::dbgs() << "Visiting: " << fn->getName() << "\n");
351373
auto &rcfi = *getAnalysis<RCIdentityAnalysis>()->get(fn);
352374
OptRemarkGeneratorInstructionVisitor visitor(*fn, rcfi);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: %target-swiftc_driver -O -Rpass-missed=sil-opt-remark-gen -Xllvm -sil-disable-pass=FunctionSignatureOpts -emit-sil %s -o /dev/null -Xfrontend -verify -Xllvm -optremarkgen-visit-implicit-autogen-funcs=1
2+
3+
class Klass {}
4+
5+
struct KlassPair {
6+
var lhs: Klass // expected-remark {{retain of type 'Klass'}}
7+
// expected-note @-1 {{of 'self.lhs'}}
8+
// expected-remark @-2 {{release of type 'Klass'}}
9+
// expected-note @-3 {{of 'self.lhs'}}
10+
var rhs: Klass // expected-remark {{retain of type 'Klass'}}
11+
// expected-note @-1 {{of 'self.rhs'}}
12+
// expected-remark @-2 {{release of type 'Klass'}}
13+
// expected-note @-3 {{of 'self.rhs'}}
14+
}
15+

test/SILOptimizer/opt-remark-generator.swift

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,7 @@ case third
3131
}
3232

3333
struct StructWithOwner {
34-
// This retain is from the initializers of owner.
35-
//
36-
// TODO: Should we emit this?
37-
var owner = Klass() // expected-remark {{retain of type 'Klass'}}
38-
// expected-note @-1 {{of 'self.owner'}}
39-
// expected-remark @-2 {{release of type 'Klass'}}
40-
// expected-note @-3 {{of 'self.owner'}}
34+
var owner = Klass()
4135
var state = TrivialState.first
4236
}
4337

@@ -66,14 +60,8 @@ func callingAnInitializerStructWithOwner(x: Klass) -> StructWithOwner {
6660
}
6761

6862
struct KlassPair {
69-
var lhs: Klass // expected-remark {{retain of type 'Klass'}}
70-
// expected-note @-1 {{of 'self.lhs'}}
71-
// expected-remark @-2 {{release of type 'Klass'}}
72-
// expected-note @-3 {{of 'self.lhs'}}
73-
var rhs: Klass // expected-remark {{retain of type 'Klass'}}
74-
// expected-note @-1 {{of 'self.rhs'}}
75-
// expected-remark @-2 {{release of type 'Klass'}}
76-
// expected-note @-3 {{of 'self.rhs'}}
63+
var lhs: Klass
64+
var rhs: Klass
7765
}
7866

7967
func printKlassPair(x : KlassPair) {

0 commit comments

Comments
 (0)