[llvm] r231726 - [Orc][MCJIT][RuntimeDyld] Add header that was accidentally left out of r231724.

Lang Hames lhames at gmail.com
Mon Mar 9 16:51:09 PDT 2015


Author: lhames
Date: Mon Mar  9 18:51:09 2015
New Revision: 231726

URL: http://llvm.org/viewvc/llvm-project?rev=231726&view=rev
Log:
[Orc][MCJIT][RuntimeDyld] Add header that was accidentally left out of r231724.

Added:
    llvm/trunk/include/llvm/ExecutionEngine/JITSymbolFlags.h

Added: llvm/trunk/include/llvm/ExecutionEngine/JITSymbolFlags.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITSymbolFlags.h?rev=231726&view=auto
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/JITSymbolFlags.h (added)
+++ llvm/trunk/include/llvm/ExecutionEngine/JITSymbolFlags.h Mon Mar  9 18:51:09 2015
@@ -0,0 +1,81 @@
+//===------ JITSymbolFlags.h - Flags for symbols in the JIT -----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Symbol flags for symbols in the JIT (e.g. weak, exported).
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_JITSYMBOLFLAGS_H
+#define LLVM_EXECUTIONENGINE_JITSYMBOLFLAGS_H
+
+#include "llvm/IR/GlobalValue.h"
+
+namespace llvm {
+
+/// @brief Flags for symbols in the JIT.
+enum class JITSymbolFlags : char {
+  None = 0,
+  Weak = 1U << 0,
+  Exported = 1U << 1
+};
+
+JITSymbolFlags operator|(JITSymbolFlags LHS, JITSymbolFlags RHS) {
+  typedef std::underlying_type<JITSymbolFlags>::type UT;
+  return static_cast<JITSymbolFlags>(
+           static_cast<UT>(LHS) | static_cast<UT>(RHS));
+}
+
+JITSymbolFlags& operator |=(JITSymbolFlags &LHS, JITSymbolFlags RHS) {
+  LHS = LHS | RHS;
+  return LHS;
+}
+
+JITSymbolFlags operator&(JITSymbolFlags LHS, JITSymbolFlags RHS) {
+  typedef std::underlying_type<JITSymbolFlags>::type UT;
+  return static_cast<JITSymbolFlags>(
+           static_cast<UT>(LHS) & static_cast<UT>(RHS));
+}
+
+JITSymbolFlags& operator &=(JITSymbolFlags &LHS, JITSymbolFlags RHS) {
+  LHS = LHS & RHS;
+  return LHS;
+}
+
+/// @brief Base class for symbols in the JIT.
+class JITSymbolBase {
+public:
+  JITSymbolBase(JITSymbolFlags Flags) : Flags(Flags) {}
+
+  JITSymbolFlags getFlags() const { return Flags; }
+
+  bool isWeak() const {
+    return (Flags & JITSymbolFlags::Weak) == JITSymbolFlags::Weak;
+  }
+
+  bool isExported() const {
+    return (Flags & JITSymbolFlags::Exported) == JITSymbolFlags::Exported;
+  }
+
+  static JITSymbolFlags flagsFromGlobalValue(const GlobalValue &GV) {
+    JITSymbolFlags Flags = JITSymbolFlags::None;
+    if (GV.hasWeakLinkage())
+      Flags |= JITSymbolFlags::Weak;
+    if (!GV.hasLocalLinkage() && !GV.hasHiddenVisibility())
+      Flags |= JITSymbolFlags::Exported;
+    return Flags;
+
+  }
+
+private:
+  JITSymbolFlags Flags;
+};
+
+} // end namespace llvm
+
+#endif





More information about the llvm-commits mailing list