llvm_c_ext/lib/CoreExt.cpp
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 17 Sep 2015 07:28:46 +0100
changeset 40 d99596797aa1
parent 31 5280c546bd37
child 70 ced2a5c16e70
permissions -rw-r--r--
Added LLVMMetadataKind enum/pool and LLVMGetMetadataKind() This may be used by Smalltalk code to retrive concrete type of metadata node such as DILocation, DIFile and so on.
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.cpp - Additional bindings for ir ------------------------===//
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.cpp 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.cpp 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
#include <llvm-c-ext/CoreExt.h>
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
#include "llvm/IR/Attributes.h"
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
#include "llvm/IR/DebugLoc.h"
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
#include "llvm/IR/Function.h"
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
#include "llvm/IR/IRBuilder.h"
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
#include "llvm/IR/LLVMContext.h"
31
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
    25
#include "llvm/IR/DebugInfoMetadata.h"
26
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
#include "llvm/IR/Module.h"
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
using namespace llvm;
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
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
    31
  Function *Func = unwrap<Function>(Fn);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
  const AttributeSet PAL = Func->getAttributes();
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
  AttrBuilder B(PA);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
  const AttributeSet PALnew =
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
    PAL.addAttributes(Func->getContext(), AttributeSet::FunctionIndex,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
                      AttributeSet::get(Func->getContext(),
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
                                        AttributeSet::FunctionIndex, B));
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
  Func->setAttributes(PALnew);
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
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
uint64_t LLVMGetFunctionAttr2(LLVMValueRef Fn) {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
  Function *Func = unwrap<Function>(Fn);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
  const AttributeSet PAL = Func->getAttributes();
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
  return PAL.Raw(AttributeSet::FunctionIndex);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
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
  Function *Func = unwrap<Function>(Fn);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
  const AttributeSet PAL = Func->getAttributes();
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
  AttrBuilder B(PA);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
  const AttributeSet PALnew =
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
    PAL.removeAttributes(Func->getContext(), AttributeSet::FunctionIndex,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
                         AttributeSet::get(Func->getContext(),
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
                                           AttributeSet::FunctionIndex, B));
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
  Func->setAttributes(PALnew);
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
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
LLVMMetadataRef LLVMConstantAsMetadata(LLVMValueRef C) {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
  return wrap(ConstantAsMetadata::get(unwrap<Constant>(C)));
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
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
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
    63
  return wrap(MDString::get(*unwrap(C), StringRef(Str, SLen)));
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
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
    67
                            unsigned Count) {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
  return wrap(
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
      MDNode::get(*unwrap(C), ArrayRef<Metadata *>(unwrap(MDs), Count)));
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
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
    73
                                    unsigned Count) {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
  return wrap(MDTuple::getTemporary(*unwrap(C),
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
                                    ArrayRef<Metadata *>(unwrap(MDs), Count))
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
                  .release());
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
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
    80
                                  LLVMMetadataRef Val) {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
  NamedMDNode *N = unwrap(M)->getOrInsertNamedMetadata(name);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
  if (!N)
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    return;
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
  if (!Val)
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    return;
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
  N->addOperand(unwrap<MDNode>(Val));
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
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
    90
  MDNode *N = MD ? unwrap<MDNode>(MD) : nullptr;
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
  unwrap<Instruction>(Inst)->setMetadata(KindID, N);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
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
    95
  auto *Node = unwrap<MDNode>(MD);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
  Node->replaceAllUsesWith(unwrap<Metadata>(New));
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
  MDNode::deleteTemporary(Node);
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
}
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
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
   101
                                  unsigned Col, LLVMMetadataRef Scope,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
                                  LLVMMetadataRef InlinedAt) {
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
  unwrap(Bref)->SetCurrentDebugLocation(
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
      DebugLoc::get(Line, Col, Scope ? unwrap<MDNode>(Scope) : nullptr,
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
                    InlinedAt ? unwrap<MDNode>(InlinedAt) : nullptr));
f6379df4b5ea Added DIBuilder API to LLVM C Ext library
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
}
31
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   107
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   108
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
   109
	return wrap(unwrap(Bref)->getCurrentDebugLocation());
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   110
}
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   111
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   112
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
   113
	unwrap(M)->addModuleFlag((Module::ModFlagBehavior)Behavior, StringRef(Key), unwrap(Val));
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
40
d99596797aa1 Added LLVMMetadataKind enum/pool and LLVMGetMetadataKind()
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   116
LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef MD) {
d99596797aa1 Added LLVMMetadataKind enum/pool and LLVMGetMetadataKind()
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   117
	return (LLVMMetadataKind)(unwrap(MD)->getMetadataID());
d99596797aa1 Added LLVMMetadataKind enum/pool and LLVMGetMetadataKind()
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   118
}
d99596797aa1 Added LLVMMetadataKind enum/pool and LLVMGetMetadataKind()
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 31
diff changeset
   119
31
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   120
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
   121
	return LLVMMetadataAsValueInContext(LLVMGetGlobalContext(), MD);
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   122
}
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
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
   125
	return wrap(MetadataAsValue::get(*unwrap(C), unwrap(MD)));
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
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   128
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
   129
	return wrap(ValueAsMetadata::get(unwrap(Value)));
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
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   132
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
   133
	if (ConstantInt* CI = dyn_cast<ConstantInt>(unwrap(Value))) {
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   134
		if (CI->getBitWidth() <= 64) {
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   135
			return CI->getSExtValue();
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   136
		}
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
	// Not a constant integer value,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   139
	return 0;
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   140
}
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   141
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   142
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
   143
	if (ConstantInt* CI = dyn_cast<ConstantInt>(unwrap(Value))) {
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   144
		if (CI->getBitWidth() <= 64) {
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   145
			return CI->getZExtValue();
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
	}
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   148
	// Not a constant integer value,
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   149
	return 0;
5280c546bd37 LLVM C API Extensions: added utility conversion/data extraction routines
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   150
}