OSDN Git Service

[PM] Significantly refactor the pass pipeline parsing to be easier to
authorChandler Carruth <chandlerc@gmail.com>
Wed, 3 Aug 2016 03:21:41 +0000 (03:21 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Wed, 3 Aug 2016 03:21:41 +0000 (03:21 +0000)
commit3d1a470319829ae996bfdb8fd3b3811e45574861
treed78a6836665a91c2249b57e6106ce487a88715fc
parent265028f005a547acc8c5e66b5a2126b36bdfbb06
[PM] Significantly refactor the pass pipeline parsing to be easier to
reason about and less error prone.

The core idea is to fully parse the text without trying to identify
passes or structure. This is done with a single state machine. There
were various bugs in the logic around this previously that were repeated
and scattered across the code. Having a single routine makes it much
easier to fix and get correct. For example, this routine doesn't suffer
from PR28577.

Then the actual pass construction is handled using *much* easier to read
code and simple loops, with particular pass manager construction sunk to
live with other pass construction. This is especially nice as the pass
managers *are* in fact passes.

Finally, the "implicit" pass manager synthesis is done much more simply
by forming "pre-parsed" structures rather than having to duplicate tons
of logic.

One of the bugs fixed by this was evident in the tests where we accepted
a pipeline that wasn't really well formed. Another bug is PR28577 for
which I have added a test case.

The code is less efficient than the previous code but I'm really hoping
that's not a priority. ;]

Thanks to Sean for the review!

Differential Revision: https://reviews.llvm.org/D22724

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277561 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Passes/PassBuilder.h
lib/Passes/PassBuilder.cpp
test/Other/pass-pipeline-parsing.ll
test/Transforms/LoopStrengthReduce/quadradic-exit-value.ll