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-- |
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 |
} |