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