llvm_c_ext/include/llvm-c-ext/CoreExt.h
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 17 Aug 2015 09:14:38 +0100
changeset 31 5280c546bd37
parent 26 f6379df4b5ea
child 40 d99596797aa1
permissions -rw-r--r--
LLVM C API Extensions: added utility conversion/data extraction routines * to convert metadata to values and vice-versa. * to extract bit-width from integer types. These comes handy when generating debug information.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
//===- IRBindings.h - Additional bindings for IR ----------------*- C++ -*-===//
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
//
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
//                     The LLVM Compiler Infrastructure
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
//
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
// This file is distributed under the University of Illinois Open Source
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
// License. See LICENSE.TXT for details.
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
//
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
//===----------------------------------------------------------------------===//
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
//
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
// This file defines additional C bindings for the IR component.
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
//
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
//===----------------------------------------------------------------------===//
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
/*
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
 * Shamelessly based on IRBindings.h from LLVM's GO bindings. The original
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
 * file could be found at bindings/go/llvm/IRBindings.h in LLVM source tree.
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
 */
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
#ifndef LLVM_BINDINGS_GO_LLVM_IRBINDINGS_H
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
#define LLVM_BINDINGS_GO_LLVM_IRBINDINGS_H
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
31
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    22
struct LLVMOpaqueMetadata;
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    23
26
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
#if defined(__cplusplus) && !defined(__GCCXML__)
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
#include "llvm-c/Core.h"
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
#include "llvm/IR/Metadata.h"
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
#include "llvm/Support/CBindingWrapping.h"
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
#endif
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
#include <stdint.h>
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
#include <llvm-c/Core.h>
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
#ifdef __cplusplus
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
extern "C" {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
#endif
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
typedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
// These functions duplicate the LLVM*FunctionAttr functions in the stable C
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
// API. We cannot use the existing functions because they take 32-bit attribute
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
// values, and the Go bindings expose all of the LLVM attributes, some of which
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
// have values >= 1<<32.
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
void LLVMAddFunctionAttr2(LLVMValueRef Fn, uint64_t PA);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
uint64_t LLVMGetFunctionAttr2(LLVMValueRef Fn);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
void LLVMRemoveFunctionAttr2(LLVMValueRef Fn, uint64_t PA);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
LLVMMetadataRef LLVMConstantAsMetadata(LLVMValueRef Val);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
LLVMMetadataRef LLVMMDString2(LLVMContextRef C, const char *Str, unsigned SLen);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
LLVMMetadataRef LLVMMDNode2(LLVMContextRef C, LLVMMetadataRef *MDs,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
                            unsigned Count);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef C, LLVMMetadataRef *MDs,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
                                    unsigned Count);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
void LLVMAddNamedMetadataOperand2(LLVMModuleRef M, const char *name,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
                                  LLVMMetadataRef Val);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
void LLVMSetMetadata2(LLVMValueRef Inst, unsigned KindID, LLVMMetadataRef MD);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef MD, LLVMMetadataRef New);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
31
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    63
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    64
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    65
 * Set the current source location in the original source. This information
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    66
 * is used to attach debug information to each instruction generated
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    67
 * from now onwards (until a new location is set)
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    68
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    69
 * \param Bref the IR builder in which to set the location
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    70
 * \param Line source line of upcoming instructions
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    71
 * \param Col source column of upcoming instructions
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    72
 * \param Scope a scope in which the location belongs, i.e.,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    73
 *   a DISubroutine, a DILexicalBlock end so on.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    74
 * \param InlinedAt if the code is inlined, the scope in which
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    75
 *   it is inlined
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    76
 */
26
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
void LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
                                  unsigned Col, LLVMMetadataRef Scope,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
                                  LLVMMetadataRef InlinedAt);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
31
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    81
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    82
 * Returns current source location as LLVM metadata (instance of DILocation).
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    83
 * Reference to the location may be then passed to LLVMDiBuilderInsertDeclare()
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    84
 * and LLVMDiBuilderInsertValue().
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    85
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    86
 * \param Bref a builder from which to obtain the location
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    87
 * \return DILocation as LLVMMetadataRef
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    88
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    89
 * \see LLVMDiBuilderInsertDeclare()
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    90
 * \see LLVMDiBuilderInsertValue()
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    91
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    92
LLVMMetadataRef LLVMGetCurrentDebugLocation2(LLVMBuilderRef Bref);
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    93
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    94
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    95
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    96
 * This enumeration defines the supported behaviors of module flags.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    97
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    98
 * \see llvm::Module::ModFlagBehavior
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    99
 * \see llbm::Module::addModuleFlag()
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   100
 * \see LLVMAddModuleFlag()
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   101
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   102
enum LLVMModuleFlagBehavior {
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   103
	/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   104
	 * Emits an error if two values disagree, otherwise the resulting value is
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   105
	 * that of the operands.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   106
	 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   107
	LLVMModuleFlagBehaviorError = 1,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   108
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   109
	/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   110
	 * Emits a warning if two values disagree. The result value will be the
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   111
	 * operand for the flag from the first module being linked.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   112
	 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   113
	LLVMModuleFlagBehaviorWarning = 2,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   114
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   115
	/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   116
	 * Adds a requirement that another module flag be present and have a
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   117
	 * specified value after linking is performed. The value must be a metadata
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   118
	 * pair, where the first element of the pair is the ID of the module flag
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   119
	 * to be restricted, and the second element of the pair is the value the
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   120
	 * module flag should be restricted to. This behavior can be used to
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   121
	 * restrict the allowable results (via triggering of an error) of linking
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   122
	 * IDs with the **Override** behavior.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   123
	 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   124
	LLVMModuleFlagBehaviorRequire = 3,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   125
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   126
	/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   127
	 * Uses the specified value, regardless of the behavior or value of the
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   128
	 * other module. If both modules specify **Override**, but the values
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   129
	 * differ, an error will be emitted.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   130
	 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   131
	LLVMModuleFlagBehaviorOverride = 4,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   132
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   133
	/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   134
	 * Appends the two values, which are required to be metadata nodes.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   135
	 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   136
	LLVMModuleFlagBehaviorAppend = 5,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   137
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   138
	/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   139
	 * Appends the two values, which are required to be metadata
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   140
	 * nodes. However, duplicate entries in the second list are dropped
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   141
	 * during the append operation.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   142
	 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   143
	LLVMModuleFlagBehaviorAppendUnique = 6,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   144
};
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   145
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   146
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   147
 * Adds a flag to the module.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   148
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   149
 * \see llvm::Module::addModuleFlag()
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   150
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   151
void LLVMModuleAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior, const char *Key, LLVMMetadataRef Val);
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   152
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   153
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   154
 * @defgroup metadataconv Metadata - Value Conversions
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   155
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   156
 * Set of functions to convert metadata to values and back.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   157
 * These are useful in cases when to "call" an intrinsic function with
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   158
 * metadata as parameters, such as @llvm.dbg.declare.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   159
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   160
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   161
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   162
 * Convert metadata node to it's value representation.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   163
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   164
 * \param MD metadata to convert
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   165
 * \return metadata represented as LLVM value
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   166
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   167
 * \see LLVMMetadataAsValueInContext()
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   168
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   169
LLVMValueRef LLVMMetadataAsValue(LLVMMetadataRef MD);
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   170
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   171
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   172
 * Convert metadata node to it's value representation in given context.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   173
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   174
 * \param C context in which the conversion takes place
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   175
 * \param MD metadata to convert
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   176
 * \return metadata represented as LLVM value
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   177
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   178
 * \see LLVMMetadataAsValue()
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   179
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   180
LLVMValueRef LLVMMetadataAsValueInContext(LLVMContextRef C, LLVMMetadataRef MD);
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   181
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   182
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   183
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   184
 * Converts value to metadata.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   185
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   186
 * \param Value value to convert
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   187
 * \return metadata representation of the talue
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   188
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   189
LLVMMetadataRef LLVMValueAsMetadata(LLVMValueRef Value);
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   190
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   191
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   192
 * }
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   193
 */ // end of @defgroup metadataconv Metadata - Value Conversions
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   194
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   195
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   196
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   197
 * @defgroup constvalconv Constant value conversions
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   198
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   199
 * A set of functions to convert constant values represented
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   200
 * as LLVMValueRef to numeric values.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   201
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   202
 * If the LLVMValueRef is not a constant value of requested type,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   203
 * 0 is returned. Since 0 is also a valid value, caller should
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   204
 * first check whether the value is actually a constant value using
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   205
 * LLVMIsConstant() and check whether the type matches:
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   206
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   207
 * @code{.c}
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   208
 * ...
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   209
 * LLVMValueRef valueRef = ...;
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   210
 * int32_t value;
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   211
 * if( LLVMIsConstant(valueRef) &&
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   212
 *     LLVMGetTypeKind(LLVMTypeOf(valueRef)) == LLVMIntegerTypeKind &&
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   213
 *     LLVMGetIntTypeWidth(LLVMTypeOf(valueRef)) <= 64) {
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   214
 *     value = LLVMValueAsSInt64();
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   215
 * } else {
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   216
 *     ...valurRef is not a constant value of type int64_t...
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   217
 * }
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   218
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   219
 * @endcode
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   220
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   221
 * @{
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   222
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   223
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   224
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   225
 * Returns a signed 64-bit integer value of given LLVMValueRef.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   226
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   227
 * \param Value a (constant) value of type i64 (or narrower)
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   228
 * \return signed 64-bit integer value that passed Value encapsulates
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   229
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   230
 * \see constvalconv
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   231
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   232
int64_t LLVMValueAsSInt64(LLVMValueRef Value);
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   233
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   234
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   235
 * Returns a unsigned 64-bit integer value of given LLVMValueRef.
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   236
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   237
 * \param Value a (constant) value of type i64 (or narrower)
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   238
 * \return unsigned 64-bit integer value that passed Value encapsulates
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   239
 *
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   240
 * \see constvalconv
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   241
 */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   242
uint64_t LLVMValueAsUInt64(LLVMValueRef Value);
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   243
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   244
/* TODO: Add functions for FP types and perhaps for strings.   */
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   245
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   246
/**
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   247
 * }
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   248
 */ // end of @defgroup constvalconv Constant value conversions
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   249
26
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
#ifdef __cplusplus
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
#endif
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
#if defined(__cplusplus) && !defined(__GCCXML__)
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
namespace llvm {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
DEFINE_ISA_CONVERSION_FUNCTIONS(Metadata, LLVMMetadataRef)
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
inline Metadata **unwrap(LLVMMetadataRef *Vals) {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
  return reinterpret_cast<Metadata**>(Vals);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
#endif
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
#endif