+namespace llvm {
+ template<typename T> class SmallVectorImpl;
+ class LLVMContext;
+
+ /// If object contains references to other objects, then relocations are
+ /// usually required for emission of such object (especially in PIC mode). One
+ /// usually distinguishes local and global relocations. Local relocations are
+ /// made wrt objects in the same module and these objects have local (internal
+ /// or private) linkage. Global relocations are made wrt externally visible
+ /// objects. In most cases local relocations can be resolved via so-called
+ /// 'pre-link' technique.
+ namespace Reloc {
+ const unsigned None = 0;
+ const unsigned Local = 1 << 0; ///< Local relocations are required
+ const unsigned Global = 1 << 1; ///< Global relocations are required
+ const unsigned LocalOrGlobal = Local | Global;
+ }
+
+/// This is an important base class in LLVM. It provides the common facilities
+/// of all constant values in an LLVM program. A constant is a value that is
+/// immutable at runtime. Functions are constants because their address is
+/// immutable. Same with global variables.
+///
+/// All constants share the capabilities provided in this class. All constants
+/// can have a null value. They can have an operand list. Constants can be
+/// simple (integer and floating point values), complex (arrays and structures),
+/// or expression based (computations yielding a constant value composed of
+/// only certain operators and other constant values).
+///
+/// Note that Constants are immutable (once created they never change)
+/// and are fully shared by structural equivalence. This means that two
+/// structurally equivalent constants will always have the same address.
+/// Constants are created on demand as needed and never deleted: thus clients
+/// don't have to worry about the lifetime of the objects.
+/// @brief LLVM Constant Representation