[mlir][Inliner] Keep the number of async pass managers constant
authorRiver Riddle <riddleriver@gmail.com>
Wed, 24 Feb 2021 00:40:09 +0000 (16:40 -0800)
committerRiver Riddle <riddleriver@gmail.com>
Wed, 24 Feb 2021 00:40:24 +0000 (16:40 -0800)
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

index ad89e47..0a2cc7e 100644 (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.