[Verifier] Parallelize verification and dom checking. NFC.
authorChris Lattner <clattner@nondot.org>
Mon, 14 Jun 2021 04:42:06 +0000 (21:42 -0700)
committerChris Lattner <clattner@nondot.org>
Mon, 14 Jun 2021 17:03:07 +0000 (10:03 -0700)
commitce77039596a9bfb9f1649455ef4f26aeada2ee8c
treefe89ac3702a978f46206afd4e113a6e96d80cb10
parent8591640379ac9175a8a8493126ecf0b44e3bb4af
[Verifier] Parallelize verification and dom checking.  NFC.

This changes the outer verification loop to not recurse into
IsolatedFromAbove operations - instead return them up to a place
where a parallel for loop can process them all in parallel.  This
also changes Dominance checking to happen on IsolatedFromAbove
chunks of the region tree, which makes it easy to fold operation
and dominance verification into a single simple parallel regime.

This speeds up firtool in CIRCT from ~40s to 31s on a large
testcase in -verify-each mode (the default).  The .fir parser and
module passes in particular benefit from this - FModule passes
(roughly analogous to function passes) were already running the
verifier in parallel as part of the pass manager.  This allows
the whole-module passes to verify their enclosed functions /
FModules in parallel.

-verify-each mode is still faster (26.3s on the same testcase),
but we do expect the verifier to take *some* time.

Differential Revision: https://reviews.llvm.org/D104207
mlir/lib/IR/Verifier.cpp