From 16a50c9e642fd085e5ceb68c403b71b5b2e0607c Mon Sep 17 00:00:00 2001 From: River Riddle Date: Tue, 23 Feb 2021 16:40:09 -0800 Subject: [PATCH] [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. --- mlir/lib/Transforms/Inliner.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mlir/lib/Transforms/Inliner.cpp b/mlir/lib/Transforms/Inliner.cpp index ad89e47715085..0a2cc7eb4c98a 100644 --- a/mlir/lib/Transforms/Inliner.cpp +++ b/mlir/lib/Transforms/Inliner.cpp @@ -687,10 +687,10 @@ LogicalResult InlinerPass::optimizeSCCAsync(MutableArrayRef 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.