1 //===------ JITSymbolFlags.h - Flags for symbols in the JIT -----*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Symbol flags for symbols in the JIT (e.g. weak, exported).
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_EXECUTIONENGINE_JITSYMBOLFLAGS_H
15 #define LLVM_EXECUTIONENGINE_JITSYMBOLFLAGS_H
17 #include "llvm/IR/GlobalValue.h"
21 /// @brief Flags for symbols in the JIT.
22 enum class JITSymbolFlags : char {
28 inline JITSymbolFlags operator|(JITSymbolFlags LHS, JITSymbolFlags RHS) {
29 typedef std::underlying_type<JITSymbolFlags>::type UT;
30 return static_cast<JITSymbolFlags>(
31 static_cast<UT>(LHS) | static_cast<UT>(RHS));
34 inline JITSymbolFlags& operator |=(JITSymbolFlags &LHS, JITSymbolFlags RHS) {
39 inline JITSymbolFlags operator&(JITSymbolFlags LHS, JITSymbolFlags RHS) {
40 typedef std::underlying_type<JITSymbolFlags>::type UT;
41 return static_cast<JITSymbolFlags>(
42 static_cast<UT>(LHS) & static_cast<UT>(RHS));
45 inline JITSymbolFlags& operator &=(JITSymbolFlags &LHS, JITSymbolFlags RHS) {
50 /// @brief Base class for symbols in the JIT.
53 JITSymbolBase(JITSymbolFlags Flags) : Flags(Flags) {}
55 JITSymbolFlags getFlags() const { return Flags; }
58 return (Flags & JITSymbolFlags::Weak) == JITSymbolFlags::Weak;
61 bool isExported() const {
62 return (Flags & JITSymbolFlags::Exported) == JITSymbolFlags::Exported;
65 static JITSymbolFlags flagsFromGlobalValue(const GlobalValue &GV) {
66 JITSymbolFlags Flags = JITSymbolFlags::None;
67 if (GV.hasWeakLinkage())
68 Flags |= JITSymbolFlags::Weak;
69 if (!GV.hasLocalLinkage() && !GV.hasHiddenVisibility())
70 Flags |= JITSymbolFlags::Exported;
79 } // end namespace llvm