137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===- IRBindings.h - Additional bindings for IR ----------------*- C++ -*-===//
237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//                     The LLVM Compiler Infrastructure
437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// This file is distributed under the University of Illinois Open Source
637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// License. See LICENSE.TXT for details.
737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===//
937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
1037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// This file defines additional C bindings for the IR component.
1137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//
1237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===//
1337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifndef LLVM_BINDINGS_GO_LLVM_IRBINDINGS_H
1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#define LLVM_BINDINGS_GO_LLVM_IRBINDINGS_H
1637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
1737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "llvm-c/Core.h"
18ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#ifdef __cplusplus
19ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/IR/Metadata.h"
20ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/Support/CBindingWrapping.h"
21ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#endif
22ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
2337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include <stdint.h>
2437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
2537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifdef __cplusplus
2637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesextern "C" {
2737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#endif
2837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
29ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinestypedef struct LLVMOpaqueMetadata *LLVMMetadataRef;
30ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
3137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// These functions duplicate the LLVM*FunctionAttr functions in the stable C
3237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// API. We cannot use the existing functions because they take 32-bit attribute
3337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// values, and the Go bindings expose all of the LLVM attributes, some of which
3437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// have values >= 1<<32.
3537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
3637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMAddFunctionAttr2(LLVMValueRef Fn, uint64_t PA);
3737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesuint64_t LLVMGetFunctionAttr2(LLVMValueRef Fn);
3837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid LLVMRemoveFunctionAttr2(LLVMValueRef Fn, uint64_t PA);
3937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
40ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesLLVMMetadataRef LLVMConstantAsMetadata(LLVMValueRef Val);
41ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
42ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesLLVMMetadataRef LLVMMDString2(LLVMContextRef C, const char *Str, unsigned SLen);
43ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesLLVMMetadataRef LLVMMDNode2(LLVMContextRef C, LLVMMetadataRef *MDs,
44ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                            unsigned Count);
45ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesLLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef C, LLVMMetadataRef *MDs,
46ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                                    unsigned Count);
47ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
48ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid LLVMAddNamedMetadataOperand2(LLVMModuleRef M, const char *name,
49ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                                  LLVMMetadataRef Val);
50ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid LLVMSetMetadata2(LLVMValueRef Inst, unsigned KindID, LLVMMetadataRef MD);
51ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
52ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef MD, LLVMMetadataRef New);
53ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
54ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesvoid LLVMSetCurrentDebugLocation2(LLVMBuilderRef Bref, unsigned Line,
55ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                                  unsigned Col, LLVMMetadataRef Scope,
56ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines                                  LLVMMetadataRef InlinedAt);
57ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
58f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid LLVMSetSubprogram(LLVMValueRef Fn, LLVMMetadataRef SP);
59f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
6037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#ifdef __cplusplus
6137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines}
62ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
63ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesnamespace llvm {
64ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
65ebe69fe11e48d322045d5949c83283927a0d790bStephen HinesDEFINE_ISA_CONVERSION_FUNCTIONS(Metadata, LLVMMetadataRef)
66ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
67ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesinline Metadata **unwrap(LLVMMetadataRef *Vals) {
68ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  return reinterpret_cast<Metadata**>(Vals);
69ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines}
70ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
71ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines}
72ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
7337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#endif
7437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
7537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#endif
76