//===- MLIRContext.h - MLIR Global Context Class ----------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef MLIR_IR_MLIRCONTEXT_H #define MLIR_IR_MLIRCONTEXT_H #include "mlir/Support/LLVM.h" #include "mlir/Support/TypeID.h" #include "llvm/ADT/ArrayRef.h" #include <functional> #include <memory> #include <vector> namespace llvm { class ThreadPoolInterface; } // namespace llvm namespace mlir { namespace tracing { class Action; } class DiagnosticEngine; class Dialect; class DialectRegistry; class DynamicDialect; class InFlightDiagnostic; class Location; class MLIRContextImpl; class RegisteredOperationName; class StorageUniquer; class IRUnit; /// MLIRContext is the top-level object for a collection of MLIR operations. It /// holds immortal uniqued objects like types, and the tables used to unique /// them. /// /// MLIRContext gets a redundant "MLIR" prefix because otherwise it ends up with /// a very generic name ("Context") and because it is uncommon for clients to /// interact with it. /// /// The context wrap some multi-threading facilities, and in particular by /// default it will implicitly create a thread pool. /// This can be undesirable if multiple context exists at the same time or if a /// process will be long-lived and create and destroy contexts. /// To control better thread spawning, an externally owned ThreadPool can be /// injected in the context. For example: /// /// llvm::DefaultThreadPool myThreadPool; /// while (auto *request = nextCompilationRequests()) { /// MLIRContext ctx(registry, MLIRContext::Threading::DISABLED); /// ctx.setThreadPool(myThreadPool); /// processRequest(request, cxt); /// } /// class MLIRContext { … }; //===----------------------------------------------------------------------===// // MLIRContext CommandLine Options //===----------------------------------------------------------------------===// /// Register a set of useful command-line options that can be used to configure /// various flags within the MLIRContext. These flags are used when constructing /// an MLIR context for initialization. void registerMLIRContextCLOptions(); } // namespace mlir #endif // MLIR_IR_MLIRCONTEXT_H