bool verifyDiagnostics, bool verifyPasses,
bool allowUnregisteredDialects, bool preloadDialectsInContext,
PassPipelineFn passManagerSetupFn, DialectRegistry ®istry,
- llvm::ThreadPool &threadPool) {
+ llvm::ThreadPool *threadPool) {
// Tell sourceMgr about this buffer, which is what the parser will pick up.
SourceMgr sourceMgr;
sourceMgr.AddNewSourceBuffer(std::move(ownedBuffer), SMLoc());
// Create a context just for the current buffer. Disable threading on creation
// since we'll inject the thread-pool separately.
MLIRContext context(registry, MLIRContext::Threading::DISABLED);
- context.setThreadPool(threadPool);
+ if (threadPool)
+ context.setThreadPool(*threadPool);
// Parse the input file.
if (preloadDialectsInContext)
// up into small pieces and checks each independently.
// We use an explicit threadpool to avoid creating and joining/destroying
// threads for each of the split.
- llvm::ThreadPool threadPool;
+ ThreadPool *threadPool = nullptr;
+ // Create a temporary context for the sake of checking if
+ // --mlir-disable-threading was passed on the command line.
+ // We use the thread-pool this context is creating, and avoid
+ // creating any thread when disabled.
+ MLIRContext threadPoolCtx;
+ if (threadPoolCtx.isMultithreadingEnabled())
+ threadPool = &threadPoolCtx.getThreadPool();
+
if (splitInputFile)
return splitAndProcessBuffer(
std::move(buffer),