[llvm] 3d2849b - [ORC] Move MaterializationUnit from Core.h into its own header. NFC.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 10 02:05:37 PST 2024
Author: Lang Hames
Date: 2024-11-10T21:05:23+11:00
New Revision: 3d2849bd151f415b59044736e069c7605339b8e2
URL: https://github.com/llvm/llvm-project/commit/3d2849bd151f415b59044736e069c7605339b8e2
DIFF: https://github.com/llvm/llvm-project/commit/3d2849bd151f415b59044736e069c7605339b8e2.diff
LOG: [ORC] Move MaterializationUnit from Core.h into its own header. NFC.
Continuing Core.h clean-up.
Added:
llvm/include/llvm/ExecutionEngine/Orc/MaterializationUnit.h
Modified:
llvm/include/llvm/ExecutionEngine/Orc/Core.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Core.h b/llvm/include/llvm/ExecutionEngine/Orc/Core.h
index c755a18020553a..119d3d878206fb 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Core.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Core.h
@@ -21,6 +21,7 @@
#include "llvm/ExecutionEngine/JITSymbol.h"
#include "llvm/ExecutionEngine/Orc/CoreContainers.h"
#include "llvm/ExecutionEngine/Orc/ExecutorProcessControl.h"
+#include "llvm/ExecutionEngine/Orc/MaterializationUnit.h"
#include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
#include "llvm/ExecutionEngine/Orc/Shared/ExecutorSymbolDef.h"
#include "llvm/ExecutionEngine/Orc/Shared/WrapperFunctionUtils.h"
@@ -40,7 +41,6 @@ namespace orc {
// Forward declare some classes.
class AsynchronousSymbolQuery;
class ExecutionSession;
-class MaterializationUnit;
class MaterializationResponsibility;
class JITDylib;
class ResourceTracker;
@@ -666,83 +666,6 @@ class MaterializationResponsibility {
SymbolStringPtr InitSymbol;
};
-/// A MaterializationUnit represents a set of symbol definitions that can
-/// be materialized as a group, or individually discarded (when
-/// overriding definitions are encountered).
-///
-/// MaterializationUnits are used when providing lazy definitions of symbols to
-/// JITDylibs. The JITDylib will call materialize when the address of a symbol
-/// is requested via the lookup method. The JITDylib will call discard if a
-/// stronger definition is added or already present.
-class MaterializationUnit {
- friend class ExecutionSession;
- friend class JITDylib;
-
-public:
- static char ID;
-
- struct Interface {
- Interface() = default;
- Interface(SymbolFlagsMap InitalSymbolFlags, SymbolStringPtr InitSymbol)
- : SymbolFlags(std::move(InitalSymbolFlags)),
- InitSymbol(std::move(InitSymbol)) {
- assert((!this->InitSymbol || this->SymbolFlags.count(this->InitSymbol)) &&
- "If set, InitSymbol should appear in InitialSymbolFlags map");
- }
-
- SymbolFlagsMap SymbolFlags;
- SymbolStringPtr InitSymbol;
- };
-
- MaterializationUnit(Interface I)
- : SymbolFlags(std::move(I.SymbolFlags)),
- InitSymbol(std::move(I.InitSymbol)) {}
- virtual ~MaterializationUnit() = default;
-
- /// Return the name of this materialization unit. Useful for debugging
- /// output.
- virtual StringRef getName() const = 0;
-
- /// Return the set of symbols that this source provides.
- const SymbolFlagsMap &getSymbols() const { return SymbolFlags; }
-
- /// Returns the initialization symbol for this MaterializationUnit (if any).
- const SymbolStringPtr &getInitializerSymbol() const { return InitSymbol; }
-
- /// Implementations of this method should materialize all symbols
- /// in the materialzation unit, except for those that have been
- /// previously discarded.
- virtual void
- materialize(std::unique_ptr<MaterializationResponsibility> R) = 0;
-
- /// Called by JITDylibs to notify MaterializationUnits that the given symbol
- /// has been overridden.
- void doDiscard(const JITDylib &JD, const SymbolStringPtr &Name) {
- SymbolFlags.erase(Name);
- if (InitSymbol == Name) {
- DEBUG_WITH_TYPE("orc", {
- dbgs() << "In " << getName() << ": discarding init symbol \""
- << *Name << "\"\n";
- });
- InitSymbol = nullptr;
- }
- discard(JD, std::move(Name));
- }
-
-protected:
- SymbolFlagsMap SymbolFlags;
- SymbolStringPtr InitSymbol;
-
-private:
- virtual void anchor();
-
- /// Implementations of this method should discard the given symbol
- /// from the source (e.g. if the source is an LLVM IR Module and the
- /// symbol is a function, delete the function body or mark it available
- /// externally).
- virtual void discard(const JITDylib &JD, const SymbolStringPtr &Name) = 0;
-};
-
/// A MaterializationUnit implementation for pre-existing absolute symbols.
///
/// All symbols will be resolved and marked ready as soon as the unit is
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/MaterializationUnit.h b/llvm/include/llvm/ExecutionEngine/Orc/MaterializationUnit.h
new file mode 100644
index 00000000000000..115e5630f53a3d
--- /dev/null
+++ b/llvm/include/llvm/ExecutionEngine/Orc/MaterializationUnit.h
@@ -0,0 +1,105 @@
+//===---- MaterializationUnit.h -- Materialization Black Box ----*- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// MaterializationUnit class and related types and operations.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_ORC_MATERIALIZATIONUNIT_H
+#define LLVM_EXECUTIONENGINE_ORC_MATERIALIZATIONUNIT_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ExecutionEngine/Orc/CoreContainers.h"
+#include "llvm/ExecutionEngine/Orc/SymbolStringPool.h"
+
+namespace llvm {
+namespace orc {
+
+class MaterializationResponsibility;
+
+/// A MaterializationUnit represents a set of symbol definitions that can
+/// be materialized as a group, or individually discarded (when
+/// overriding definitions are encountered).
+///
+/// MaterializationUnits are used when providing lazy definitions of symbols to
+/// JITDylibs. The JITDylib will call materialize when the address of a symbol
+/// is requested via the lookup method. The JITDylib will call discard if a
+/// stronger definition is added or already present.
+class MaterializationUnit {
+ friend class ExecutionSession;
+ friend class JITDylib;
+
+public:
+ static char ID;
+
+ struct Interface {
+ Interface() = default;
+ Interface(SymbolFlagsMap InitalSymbolFlags, SymbolStringPtr InitSymbol)
+ : SymbolFlags(std::move(InitalSymbolFlags)),
+ InitSymbol(std::move(InitSymbol)) {
+ assert((!this->InitSymbol || this->SymbolFlags.count(this->InitSymbol)) &&
+ "If set, InitSymbol should appear in InitialSymbolFlags map");
+ }
+
+ SymbolFlagsMap SymbolFlags;
+ SymbolStringPtr InitSymbol;
+ };
+
+ MaterializationUnit(Interface I)
+ : SymbolFlags(std::move(I.SymbolFlags)),
+ InitSymbol(std::move(I.InitSymbol)) {}
+ virtual ~MaterializationUnit() = default;
+
+ /// Return the name of this materialization unit. Useful for debugging
+ /// output.
+ virtual StringRef getName() const = 0;
+
+ /// Return the set of symbols that this source provides.
+ const SymbolFlagsMap &getSymbols() const { return SymbolFlags; }
+
+ /// Returns the initialization symbol for this MaterializationUnit (if any).
+ const SymbolStringPtr &getInitializerSymbol() const { return InitSymbol; }
+
+ /// Implementations of this method should materialize all symbols
+ /// in the materialzation unit, except for those that have been
+ /// previously discarded.
+ virtual void
+ materialize(std::unique_ptr<MaterializationResponsibility> R) = 0;
+
+ /// Called by JITDylibs to notify MaterializationUnits that the given symbol
+ /// has been overridden.
+ void doDiscard(const JITDylib &JD, const SymbolStringPtr &Name) {
+ SymbolFlags.erase(Name);
+ if (InitSymbol == Name) {
+ DEBUG_WITH_TYPE("orc", {
+ dbgs() << "In " << getName() << ": discarding init symbol \""
+ << *Name << "\"\n";
+ });
+ InitSymbol = nullptr;
+ }
+ discard(JD, std::move(Name));
+ }
+
+protected:
+ SymbolFlagsMap SymbolFlags;
+ SymbolStringPtr InitSymbol;
+
+private:
+ virtual void anchor();
+
+ /// Implementations of this method should discard the given symbol
+ /// from the source (e.g. if the source is an LLVM IR Module and the
+ /// symbol is a function, delete the function body or mark it available
+ /// externally).
+ virtual void discard(const JITDylib &JD, const SymbolStringPtr &Name) = 0;
+};
+
+} // End namespace orc
+} // End namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_ORC_MATERIALIZATIONUNIT_H
More information about the llvm-commits
mailing list