Skip to content

Commit edc1a28

Browse files
committed
[Stats] Add some tracers to Sema.
1 parent 0167821 commit edc1a28

File tree

7 files changed

+17
-4
lines changed

7 files changed

+17
-4
lines changed

lib/Sema/CSGen.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "swift/AST/ParameterList.h"
2222
#include "swift/AST/PrettyStackTrace.h"
2323
#include "swift/AST/SubstitutionMap.h"
24+
#include "swift/Basic/Statistic.h"
2425
#include "swift/Sema/IDETypeChecking.h"
2526
#include "llvm/ADT/APInt.h"
2627
#include "llvm/ADT/StringExtras.h"
@@ -3586,6 +3587,8 @@ class InferUnresolvedMemberConstraintGenerator : public ConstraintGenerator {
35863587
bool swift::typeCheckUnresolvedExpr(DeclContext &DC,
35873588
Expr *E, Expr *Parent,
35883589
SmallVectorImpl<Type> &PossibleTypes) {
3590+
FrontendStatsTracer StatsTracer(DC.getASTContext().Stats,
3591+
"typecheck-unresolved-member", Parent);
35893592
PrettyStackTraceExpr stackTrace(DC.getASTContext(),
35903593
"type-checking unresolved member", Parent);
35913594

lib/Sema/TypeCheckConstraints.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "swift/AST/PrettyStackTrace.h"
3131
#include "swift/AST/SubstitutionMap.h"
3232
#include "swift/AST/TypeCheckerDebugConsumer.h"
33+
#include "swift/Basic/Statistic.h"
3334
#include "swift/Parse/Confusables.h"
3435
#include "swift/Parse/Lexer.h"
3536
#include "llvm/ADT/APInt.h"
@@ -1791,6 +1792,7 @@ Type TypeChecker::typeCheckExpression(Expr *&expr, DeclContext *dc,
17911792
TypeCheckExprOptions options,
17921793
ExprTypeCheckListener *listener,
17931794
ConstraintSystem *baseCS) {
1795+
FrontendStatsTracer StatsTracer(Context.Stats, "typecheck-expr", expr);
17941796
PrettyStackTraceExpr stackTrace(Context, "type-checking", expr);
17951797

17961798
// First, pre-check the expression, validating any types that occur in the
@@ -1914,6 +1916,7 @@ getTypeOfExpressionWithoutApplying(Expr *&expr, DeclContext *dc,
19141916
ConcreteDeclRef &referencedDecl,
19151917
FreeTypeVariableBinding allowFreeTypeVariables,
19161918
ExprTypeCheckListener *listener) {
1919+
FrontendStatsTracer StatsTracer(Context.Stats, "typecheck-expr-no-apply", expr);
19171920
PrettyStackTraceExpr stackTrace(Context, "type-checking", expr);
19181921
referencedDecl = nullptr;
19191922

@@ -1997,6 +2000,7 @@ void TypeChecker::getPossibleTypesOfExpressionWithoutApplying(
19972000
Expr *&expr, DeclContext *dc, SmallPtrSetImpl<TypeBase *> &types,
19982001
FreeTypeVariableBinding allowFreeTypeVariables,
19992002
ExprTypeCheckListener *listener) {
2003+
FrontendStatsTracer StatsTracer(Context.Stats, "get-possible-types-no-apply", expr);
20002004
PrettyStackTraceExpr stackTrace(Context, "type-checking", expr);
20012005

20022006
ExprCleaner cleaner(expr);
@@ -2033,6 +2037,7 @@ void TypeChecker::getPossibleTypesOfExpressionWithoutApplying(
20332037
}
20342038

20352039
bool TypeChecker::typeCheckCompletionSequence(Expr *&expr, DeclContext *DC) {
2040+
FrontendStatsTracer StatsTracer(Context.Stats, "typecheck-completion-seq", expr);
20362041
PrettyStackTraceExpr stackTrace(Context, "type-checking", expr);
20372042

20382043
// Construct a constraint system from this expression.
@@ -2110,6 +2115,7 @@ bool TypeChecker::typeCheckCompletionSequence(Expr *&expr, DeclContext *DC) {
21102115
}
21112116

21122117
bool TypeChecker::typeCheckExpressionShallow(Expr *&expr, DeclContext *dc) {
2118+
FrontendStatsTracer StatsTracer(Context.Stats, "typecheck-expr-shallow", expr);
21132119
PrettyStackTraceExpr stackTrace(Context, "shallow type-checking", expr);
21142120

21152121
// Construct a constraint system from this expression.
@@ -2706,6 +2712,7 @@ bool TypeChecker::typeCheckStmtCondition(StmtCondition &cond, DeclContext *dc,
27062712
/// value of a given type.
27072713
bool TypeChecker::typeCheckExprPattern(ExprPattern *EP, DeclContext *DC,
27082714
Type rhsType) {
2715+
FrontendStatsTracer StatsTracer(Context.Stats, "typecheck-expr-pattern", EP);
27092716
PrettyStackTracePattern stackTrace(Context, "type-checking", EP);
27102717

27112718
// Create a 'let' binding to stand in for the RHS value.

lib/Sema/TypeCheckDecl.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6807,6 +6807,7 @@ void TypeChecker::validateDecl(ValueDecl *D) {
68076807
}
68086808

68096809
PrettyStackTraceDecl StackTrace("validating", D);
6810+
FrontendStatsTracer StatsTracer(Context.Stats, "validate-decl", D);
68106811

68116812
if (hasEnabledForbiddenTypecheckPrefix())
68126813
checkForForbiddenPrefix(D);
@@ -9101,6 +9102,7 @@ void TypeChecker::synthesizeMemberForLookup(NominalTypeDecl *target,
91019102
}
91029103

91039104
void TypeChecker::defineDefaultConstructor(NominalTypeDecl *decl) {
9105+
FrontendStatsTracer StatsTracer(Context.Stats, "define-default-ctor", decl);
91049106
PrettyStackTraceDecl stackTrace("defining default constructor for",
91059107
decl);
91069108

lib/Sema/TypeCheckStmt.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ class StmtChecker : public StmtVisitor<StmtChecker, Stmt*> {
377377

378378
template<typename StmtTy>
379379
bool typeCheckStmt(StmtTy *&S) {
380+
FrontendStatsTracer StatsTracer(TC.Context.Stats, "typecheck-stmt", S);
380381
PrettyStackTraceStmt trace(TC.Context, "type-checking", S);
381382
StmtTy *S2 = cast_or_null<StmtTy>(visit(S));
382383
if (S2 == nullptr)

lib/Sema/TypeCheckType.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1678,6 +1678,7 @@ Type TypeChecker::resolveType(TypeRepr *TyR, DeclContext *DC,
16781678
TypeResolutionOptions options,
16791679
GenericTypeResolver *resolver,
16801680
UnsatisfiedDependency *unsatisfiedDependency) {
1681+
FrontendStatsTracer StatsTracer(Context.Stats, "resolve-type", TyR);
16811682
PrettyStackTraceTypeRepr stackTrace(Context, "resolving", TyR);
16821683

16831684
// Make sure we always have a resolver to use.

test/Misc/stats_dir_profiler.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
// RUN: %FileCheck -check-prefix=ENTITIES -input-file %t/stats-entities/*.dir/Time.User.entities %s
88

99
// EVENTS: {{perform-sema;.*;typecheck-decl [0-9]+}}
10-
// ENTITIES: {{perform-sema;.*;typecheck-fn bar\(\);typecheck-decl <pattern binding> [0-9]+}}
10+
// ENTITIES: {{perform-sema;.*;typecheck-fn bar\(\);typecheck-stmt Brace;typecheck-decl <pattern binding> [0-9]+}}
1111

1212
public func foo() {
1313
print("hello")

test/Misc/stats_dir_tracer.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
// RUN: %target-swiftc_driver -o %t/main -module-name main -stats-output-dir %t %s -trace-stats-events
33
// RUN: %FileCheck -input-file %t/*.csv %s
44

5-
// CHECK: {{[0-9]+,[0-9]+,"exit","lookup-direct","Sema.NominalTypeLookupDirectCount",[0-9]+,[0-9]+,"Proto","\[.*stats_dir_tracer.swift:13:1 - line:15:1\]"}}
6-
// CHECK: {{[0-9]+,[0-9]+,"exit","typecheck-fn","Sema.NumTypesDeserialized",[0-9]+,[0-9]+,"foo\(\)","\[.*stats_dir_tracer.swift:9:8 - line:11:1\]"}}
7-
// CHECK: {{[0-9]+,[0-9]+,"exit","typecheck-decl","Sema.NumConstraintScopes",[0-9]+,[0-9]+,"<pattern binding>","\[.*stats_dir_tracer.swift:23:5 - line:23:13\]"}}
5+
// CHECK: {{[0-9]+,[0-9]+,"exit","typecheck-expr","Sema.NumTypesDeserialized",[0-9]+,[0-9]+,"Call","\[.*stats_dir_tracer.swift:9:5 - line:9:18\]"}}
6+
// CHECK: {{[0-9]+,[0-9]+,"exit","typecheck-expr","Sema.NumConstraintScopes",[0-9]+,[0-9]+,"IntegerLiteral","\[.*stats_dir_tracer.swift:22:13 - line:22:13\]"}}
87

98
public func foo() {
109
print("hello")

0 commit comments

Comments
 (0)