[mlir][Inliner] Keep the number of async pass managers constant

This prevents a bug in the pass instrumentation implementation where the main thread would end up with a different pass manager in different runs of the pass.
This commit is contained in:
River Riddle
2021-02-23 16:40:09 -08:00
parent af4451eb4f
commit 16a50c9e64

View File

@@ -687,10 +687,10 @@ LogicalResult
InlinerPass::optimizeSCCAsync(MutableArrayRef<CallGraphNode *> nodesToVisit,
MLIRContext *context) {
// Ensure that there are enough pipeline maps for the optimizer to run in
// parallel.
size_t numThreads =
std::min((size_t)llvm::hardware_concurrency().compute_thread_count(),
nodesToVisit.size());
// parallel. Note: The number of pass managers here needs to remain constant
// to prevent issues with pass instrumentations that rely on having the same
// pass manager for the main thread.
size_t numThreads = llvm::hardware_concurrency().compute_thread_count();
if (opPipelines.size() < numThreads) {
// Reserve before resizing so that we can use a reference to the first
// element.