Files
swift-mirror/lib/SILAnalysis/Analysis.cpp
Erik Eckstein 160b8e07db SILPassManager: A new method to reduce the number of SIL pass runs.
It avoids that a pass runs a second time if didn't make any changes in the previous run and no other pass changed the function in between.
rdar://problem/20336764

In this change I also removed the CompleteFunctions analysis which is now obsolete.

Some measurements with swiftbench (-wmo, single threaded):
It reduces the number of pass runs by about 28%. Because only passes are skipped that don't do anything, the effect on compile time is not so dramatic.
The time spent in runSILOptimizationPasses is reduced by ~9% which gives a total compile time reduction of about 3%.




Swift SVN r26757
2015-03-31 14:19:51 +00:00

54 lines
1.7 KiB
C++

//===----- Analysis.cpp - Swift Analysis ----------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#define DEBUG_TYPE "sil-analysis"
#include "swift/SILAnalysis/Analysis.h"
#include "swift/SILAnalysis/DominanceAnalysis.h"
#include "swift/SILAnalysis/IVAnalysis.h"
#include "swift/SILAnalysis/PostOrderAnalysis.h"
#include "swift/SILAnalysis/CallGraphAnalysis.h"
#include "swift/SILAnalysis/ClassHierarchyAnalysis.h"
#include "swift/AST/Module.h"
#include "swift/AST/SILOptions.h"
#include "swift/SIL/SILModule.h"
#include "swift/SIL/SILFunction.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Support/Debug.h"
#include "swift/SILPasses/Utils/Local.h"
using namespace swift;
SILAnalysis *swift::createCallGraphAnalysis(SILModule *M) {
return new CallGraphAnalysis(M);
}
SILAnalysis *swift::createDominanceAnalysis(SILModule *) {
return new DominanceAnalysis();
}
SILAnalysis *swift::createPostDominanceAnalysis(SILModule *) {
return new PostDominanceAnalysis();
}
SILAnalysis *swift::createInductionVariableAnalysis(SILModule *M) {
return new IVAnalysis(M);
}
SILAnalysis *swift::createPostOrderAnalysis(SILModule *M) {
return new PostOrderAnalysis(M);
}
SILAnalysis *swift::createClassHierarchyAnalysis(SILModule *M) {
return new ClassHierarchyAnalysis(M);
}