[sil-opt] Only notify the pass manager of newly added functions in SILOptFunctionBuilder.

To do so this commit does a few different things:

1. I changed SILOptFunctionBuilder to notify the pass manager's logging
functionality when new functions are added to the module and to notify analyses
as well. NOTE: This on purpose does not put the new function on the pass manager
worklist since we do not want to by mistake introduce a large amount of
re-optimizations. Such a thing should be explicit.

2. I eliminated SILModuleTransform::notifyAddFunction. This just performed the
operations from 1. Now that SILOptFunctionBuilder performs this operation for
us, it is not needed.

3. I changed SILFunctionTransform::notifyAddFunction to just add the function to
the passmanager worklist. It does not need to notify the pass manager's logging
or analyses that a new function was added to the module since
SILOptFunctionBuilder now performs that operation. Given its reduced
functionality, I changed the name to addFunctionToPassManagerWorklist(...). The
name is a little long/verbose, but this is a feature since one should think
before getting the pass manager to rerun transforms on a function. Also, giving
it a longer name calls out the operation in the code visually, giving this
operation more prominance when reading code. NOTE: I did the rename using
Xcode's refactoring functionality!

rdar://42301529
This commit is contained in:
Michael Gottesman
2018-08-06 14:27:17 -07:00
parent 4d35d5e7c7
commit f35a2a3cf8
19 changed files with 60 additions and 47 deletions

View File

@@ -766,7 +766,7 @@ specializePartialApply(SILOptFunctionBuilder &FuncBuilder,
ClonedName);
Cloner.populateCloned();
ClonedFn = Cloner.getCloned();
pass.T->notifyAddFunction(ClonedFn, F);
pass.T->addFunctionToPassManagerWorklist(ClonedFn, F);
}
// Now create the new partial_apply using the cloned function.
@@ -843,7 +843,7 @@ static void rewritePartialApplies(AllocBoxToStackState &pass) {
// Clone the referenced function of each partial_apply, removing the
// operands that we will not need, and remove the existing
// partial_apply.
SILOptFunctionBuilder FuncBuilder(*pass.T->getPassManager());
SILOptFunctionBuilder FuncBuilder(*pass.T);
for (auto &It : IndexMap) {
auto *PartialApply = It.first;
auto &Indices = It.second;