[PM] Add a utility to the new pass manager for generating a pass which
authorChandler Carruth <chandlerc@gmail.com>
Tue, 6 Jan 2015 02:10:51 +0000 (02:10 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 6 Jan 2015 02:10:51 +0000 (02:10 +0000)
commit628503e4d4e5896badec12beb71bbef923ef1d29
tree52520c62f9cf0ae0f79f8ad9850eae62d40fecf9
parent7f59bb41cfa21da84de0e951d5f3370529b751a1
[PM] Add a utility to the new pass manager for generating a pass which
is a no-op other than requiring some analysis results be available.

This can be used in real pass pipelines to force the usually lazy
analysis running to eagerly compute something at a specific point, and
it can be used to test the pass manager infrastructure (my primary use
at the moment).

I've also added bit of pipeline parsing magic to support generating
these directly from the opt command so that you can directly use these
when debugging your analysis. The syntax is:

  require<analysis-name>

This can be used at any level of the pass manager. For example:

  cgscc(function(require<my-analysis>,no-op-function))

This would produce a no-op function pass requiring my-analysis, followed
by a fully no-op function pass, both of these in a function pass manager
which is nested inside of a bottom-up CGSCC pass manager which is in the
top-level (implicit) module pass manager.

I have zero attachment to the particular syntax I'm using here. Consider
it a straw man for use while I'm testing and fleshing things out.
Suggestions for better syntax welcome, and I'll update everything based
on any consensus that develops.

I've used this new functionality to more directly test the analysis
printing rather than relying on the cgscc pass manager running an
analysis for me. This is still minimally tested because I need to have
analyses to run first! ;] That patch is next, but wanted to keep this
one separate for easier review and discussion.

llvm-svn: 225236
llvm/include/llvm/IR/PassManager.h
llvm/test/Other/new-pass-manager.ll
llvm/tools/opt/Passes.cpp