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

Hal Finkel hfinkel at anl.gov
Mon Mar 9 17:36:51 PDT 2015


----- Original Message -----
> From: "Lang Hames" <lhames at gmail.com>
> To: llvm-commits at cs.uiuc.edu
> Sent: Monday, March 9, 2015 6:51:09 PM
> Subject: [llvm] r231726 - [Orc][MCJIT][RuntimeDyld] Add header that was	accidentally left out of r231724.
> 
> 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));
> +}

This does not link when compiled with gcc 4.8.0:

  multiple definition of `llvm::operator|(llvm::JITSymbolFlags, llvm::JITSymbolFlags)'

 -Hal

> +
> +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
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-commits mailing list