LLVMCEXT.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 27 Jan 2016 14:20:58 +0000
changeset 54 a288aced3dd1
parent 40 d99596797aa1
child 55 41b3437f1fc7
permissions -rw-r--r--
LLVM C API Extensions: Fixed DIBuilerCreateFunction() and DIBuilderCreateSubroutineType() for LLVM 3.9 In LLVM 3.9 some parameters to these functions were dropped. The DIBuilder interface has been changed to reflect these changes (i.e., C functions no longer require dropped argument). The LLVM C Extensions library can still be compiled against LLVM 3.8 (via #ifdef), but the API will be different. Also, the Smalltallks bindings will make use of LLVM 3.9 interface. That said, LLVM C API Extensions library may still be used by *other* projects on top of LLVM 3.8, though Smalltalk bindings require LLVM 3.9 from now on.

"
    Copyright (C) 2015-now Jan Vrany

    This code is not an open-source (yet). You may use this code
    for your own experiments and projects, given that:

    * all modification to the code will be sent to the
      original author for inclusion in future releases
    * this is not used in any commercial software

    This license is provisional and may (will) change in
    a future.
"
"{ Package: 'jv:llvm_s' }"

"{ NameSpace: Smalltalk }"

Object subclass:#LLVMCEXT
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'LLVM-S-Internal'
!

!LLVMCEXT class methodsFor:'documentation'!

copyright
"
    Copyright (C) 2015-now Jan Vrany

    This code is not an open-source (yet). You may use this code
    for your own experiments and projects, given that:

    * all modification to the code will be sent to the
      original author for inclusion in future releases
    * this is not used in any commercial software

    This license is provisional and may (will) change in
    a future.
"
!

documentation
"
    This class contains call out to LLVM C API extensions library
    (which is part of llvm-s bindings).

    This library exposes important LLVM C++ API tp C users, including:
    * access to intrinsics

    [author:]
        Jan Vrany <jan.vrany@fit.cvut.cz>

    [instance variables:]

    [class variables:]

    [see also:]

"
! !

!LLVMCEXT class methodsFor:'accessing'!

libraryName
    | pkgDir |
    pkgDir := Smalltalk getPackageDirectoryForPackage: #jv:llvm_s.
    pkgDir isNil ifTrue:[ 
        self error: 'Cannot find package directory for jv:llvm_c. Check #packagePath'.
    ].
    OperatingSystem isUNIXlike ifTrue:[ 
        ^ (pkgDir / 'llvm_c_ext' / 'lib' / 'libLLVM-C-EXT.so') pathName
    ].
    self error:'Unsupported operating system'

    "Created: / 10-08-2015 / 16:58:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!LLVMCEXT class methodsFor:'primitives'!

AddFunctionAttr2: Fn _: PA 
    "@param Fn: LLVMValueRef
     @param PA: uint64_t
     @return: void
    "

    <cdecl: void "LLVMAddFunctionAttr2" ( LLVMValue uint64 ) >
    self primitiveFailed
!

AddNamedMetadataOperand2: M _: name _: Val 
    "@param M: LLVMModuleRef
     @param name: *const char
     @param Val: LLVMMetadataRef
     @return: void
    "

    <cdecl: void "LLVMAddNamedMetadataOperand2" ( LLVMModule charPointer LLVMMetadata ) >
    self primitiveFailed
!

ConstantAsMetadata: Val 
    "@param Val: LLVMValueRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMConstantAsMetadata" ( LLVMValue ) >
    self primitiveFailed
!

DIBuilderCreateArrayType: D _: SizeInBits _: AlignInBits _: ElementType _: Subscripts 
    "@param D: LLVMDIBuilderRef
     @param SizeInBits: uint64_t
     @param AlignInBits: uint64_t
     @param ElementType: LLVMMetadataRef
     @param Subscripts: LLVMMetadataRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateArrayType" ( LLVMDIBuilder uint64 uint64 LLVMMetadata LLVMMetadata ) >
    self primitiveFailed
!

DIBuilderCreateAutoVariable: Dref _: Scope _: Name _: File _: Line _: Ty _: AlwaysPreserve _: Flags 
    "@param Dref: LLVMDIBuilderRef
     @param Scope: LLVMMetadataRef
     @param Name: *const char
     @param File: LLVMMetadataRef
     @param Line: unsigned int
     @param Ty: LLVMMetadataRef
     @param AlwaysPreserve: int
     @param Flags: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateAutoVariable" ( LLVMDIBuilder LLVMMetadata charPointer LLVMMetadata uint LLVMMetadata int uint ) >
    self primitiveFailed
!

DIBuilderCreateBasicType: D _: Name _: SizeInBits _: AlignInBits _: Encoding 
    "@param D: LLVMDIBuilderRef
     @param Name: *const char
     @param SizeInBits: uint64_t
     @param AlignInBits: uint64_t
     @param Encoding: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateBasicType" ( LLVMDIBuilder charPointer uint64 uint64 uint ) >
    self primitiveFailed
!

DIBuilderCreateCompileUnit: D _: Language _: File _: Dir _: Producer _: Optimized _: Flags _: RuntimeVersion 
    "@param D: LLVMDIBuilderRef
     @param Language: unsigned int
     @param File: *const char
     @param Dir: *const char
     @param Producer: *const char
     @param Optimized: int
     @param Flags: *const char
     @param RuntimeVersion: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateCompileUnit" ( LLVMDIBuilder uint charPointer charPointer charPointer int charPointer uint ) >
    self primitiveFailed
!

DIBuilderCreateExpression: Dref _: Addr _: Length 
    "@param Dref: LLVMDIBuilderRef
     @param Addr: *int64_t
     @param Length: size_t
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateExpression" ( LLVMDIBuilder pointer long ) >
    self primitiveFailed
!

DIBuilderCreateFile: D _: File _: Dir 
    "@param D: LLVMDIBuilderRef
     @param File: *const char
     @param Dir: *const char
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateFile" ( LLVMDIBuilder charPointer charPointer ) >
    self primitiveFailed
!

DIBuilderCreateFunction: D _: Scope _: Name _: LinkageName _: File _: Line _: CompositeType _: IsLocalToUnit _: IsDefinition _: ScopeLine _: Flags _: IsOptimized _: Function 
    "@param D: LLVMDIBuilderRef
     @param Scope: LLVMMetadataRef
     @param Name: *const char
     @param LinkageName: *const char
     @param File: LLVMMetadataRef
     @param Line: unsigned int
     @param CompositeType: LLVMMetadataRef
     @param IsLocalToUnit: int
     @param IsDefinition: int
     @param ScopeLine: unsigned int
     @param Flags: unsigned int
     @param IsOptimized: int
     @param Function: LLVMValueRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateFunction" ( LLVMDIBuilder LLVMMetadata charPointer charPointer LLVMMetadata uint LLVMMetadata int int uint uint int LLVMValue ) >
    self primitiveFailed
!

DIBuilderCreateLexicalBlock: D _: Scope _: File _: Line _: Column 
    "@param D: LLVMDIBuilderRef
     @param Scope: LLVMMetadataRef
     @param File: LLVMMetadataRef
     @param Line: unsigned int
     @param Column: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateLexicalBlock" ( LLVMDIBuilder LLVMMetadata LLVMMetadata uint uint ) >
    self primitiveFailed
!

DIBuilderCreateLexicalBlockFile: D _: Scope _: File _: Discriminator 
    "@param D: LLVMDIBuilderRef
     @param Scope: LLVMMetadataRef
     @param File: LLVMMetadataRef
     @param Discriminator: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateLexicalBlockFile" ( LLVMDIBuilder LLVMMetadata LLVMMetadata uint ) >
    self primitiveFailed
!

DIBuilderCreateMemberType: D _: Scope _: Name _: File _: Line _: SizeInBits _: AlignInBits _: OffsetInBits _: Flags _: Ty 
    "@param D: LLVMDIBuilderRef
     @param Scope: LLVMMetadataRef
     @param Name: *const char
     @param File: LLVMMetadataRef
     @param Line: unsigned int
     @param SizeInBits: uint64_t
     @param AlignInBits: uint64_t
     @param OffsetInBits: uint64_t
     @param Flags: unsigned int
     @param Ty: LLVMMetadataRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateMemberType" ( LLVMDIBuilder LLVMMetadata charPointer LLVMMetadata uint uint64 uint64 uint64 uint LLVMMetadata ) >
    self primitiveFailed
!

DIBuilderCreateParameterVariable: Dref _: Scope _: Name _: File _: Line _: Ty _: AlwaysPreserve _: Flags _: ArgNo 
    "@param Dref: LLVMDIBuilderRef
     @param Scope: LLVMMetadataRef
     @param Name: *const char
     @param File: LLVMMetadataRef
     @param Line: unsigned int
     @param Ty: LLVMMetadataRef
     @param AlwaysPreserve: int
     @param Flags: unsigned int
     @param ArgNo: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateParameterVariable" ( LLVMDIBuilder LLVMMetadata charPointer LLVMMetadata uint LLVMMetadata int uint uint ) >
    self primitiveFailed
!

DIBuilderCreatePointerType: D _: PointeeType _: SizeInBits _: AlignInBits _: Name 
    "@param D: LLVMDIBuilderRef
     @param PointeeType: LLVMMetadataRef
     @param SizeInBits: uint64_t
     @param AlignInBits: uint64_t
     @param Name: *const char
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreatePointerType" ( LLVMDIBuilder LLVMMetadata uint64 uint64 charPointer ) >
    self primitiveFailed
!

DIBuilderCreateReplaceableCompositeType: D _: Tag _: Name _: Scope _: File _: Line _: RuntimeLang _: SizeInBits _: AlignInBits _: Flags 
    "@param D: LLVMDIBuilderRef
     @param Tag: unsigned int
     @param Name: *const char
     @param Scope: LLVMMetadataRef
     @param File: LLVMMetadataRef
     @param Line: unsigned int
     @param RuntimeLang: unsigned int
     @param SizeInBits: uint64_t
     @param AlignInBits: uint64_t
     @param Flags: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateReplaceableCompositeType" ( LLVMDIBuilder uint charPointer LLVMMetadata LLVMMetadata uint uint uint64 uint64 uint ) >
    self primitiveFailed
!

DIBuilderCreateStructType: D _: Scope _: Name _: File _: Line _: SizeInBits _: AlignInBits _: Flags _: DerivedFrom _: ElementTypes 
    "@param D: LLVMDIBuilderRef
     @param Scope: LLVMMetadataRef
     @param Name: *const char
     @param File: LLVMMetadataRef
     @param Line: unsigned int
     @param SizeInBits: uint64_t
     @param AlignInBits: uint64_t
     @param Flags: unsigned int
     @param DerivedFrom: LLVMMetadataRef
     @param ElementTypes: LLVMMetadataRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateStructType" ( LLVMDIBuilder LLVMMetadata charPointer LLVMMetadata uint uint64 uint64 uint LLVMMetadata LLVMMetadata ) >
    self primitiveFailed
!

DIBuilderCreateSubroutineType: D _: File _: ParameterTypes 
    "@param D: LLVMDIBuilderRef
     @param File: LLVMMetadataRef
     @param ParameterTypes: LLVMMetadataRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateSubroutineType" ( LLVMDIBuilder LLVMMetadata LLVMMetadata ) >
    self primitiveFailed
!

DIBuilderCreateTypedef: D _: Ty _: Name _: File _: Line _: Context 
    "@param D: LLVMDIBuilderRef
     @param Ty: LLVMMetadataRef
     @param Name: *const char
     @param File: LLVMMetadataRef
     @param Line: unsigned int
     @param Context: LLVMMetadataRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderCreateTypedef" ( LLVMDIBuilder LLVMMetadata charPointer LLVMMetadata uint LLVMMetadata ) >
    self primitiveFailed
!

DIBuilderDestroy: d 
    "@param d: LLVMDIBuilderRef
     @return: void
    "

    <cdecl: void "LLVMDIBuilderDestroy" ( LLVMDIBuilder ) >
    self primitiveFailed
!

DIBuilderFinalize: d 
    "@param d: LLVMDIBuilderRef
     @return: void
    "

    <cdecl: void "LLVMDIBuilderFinalize" ( LLVMDIBuilder ) >
    self primitiveFailed
!

DIBuilderGetOrCreateArray: D _: Data _: Length 
    "@param D: LLVMDIBuilderRef
     @param Data: *LLVMMetadataRef
     @param Length: size_t
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderGetOrCreateArray" ( LLVMDIBuilder pointer long ) >
    self primitiveFailed
!

DIBuilderGetOrCreateSubrange: D _: Lo _: Count 
    "@param D: LLVMDIBuilderRef
     @param Lo: int64_t
     @param Count: int64_t
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderGetOrCreateSubrange" ( LLVMDIBuilder sint64 sint64 ) >
    self primitiveFailed
!

DIBuilderGetOrCreateTypeArray: D _: Data _: Length 
    "@param D: LLVMDIBuilderRef
     @param Data: *LLVMMetadataRef
     @param Length: size_t
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMDIBuilderGetOrCreateTypeArray" ( LLVMDIBuilder pointer long ) >
    self primitiveFailed
!

DIBuilderInsertDeclareAtEnd: D _: Storage _: VarInfo _: Expr _: Location _: Block 
    "@param D: LLVMDIBuilderRef
     @param Storage: LLVMValueRef
     @param VarInfo: LLVMMetadataRef
     @param Expr: LLVMMetadataRef
     @param Location: LLVMMetadataRef
     @param Block: LLVMBasicBlockRef
     @return: LLVMValueRef
    "

    <cdecl: LLVMValue "LLVMDIBuilderInsertDeclareAtEnd" ( LLVMDIBuilder LLVMValue LLVMMetadata LLVMMetadata LLVMMetadata pointer ) >
    self primitiveFailed
!

DIBuilderInsertValueAtEnd: D _: Val _: Offset _: VarInfo _: Expr _: Location _: Block 
    "@param D: LLVMDIBuilderRef
     @param Val: LLVMValueRef
     @param Offset: uint64_t
     @param VarInfo: LLVMMetadataRef
     @param Expr: LLVMMetadataRef
     @param Location: LLVMMetadataRef
     @param Block: LLVMBasicBlockRef
     @return: LLVMValueRef
    "

    <cdecl: LLVMValue "LLVMDIBuilderInsertValueAtEnd" ( LLVMDIBuilder LLVMValue uint64 LLVMMetadata LLVMMetadata LLVMMetadata pointer ) >
    self primitiveFailed
!

GetCurrentDebugLocation2: Bref 
    "@param Bref: LLVMBuilderRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMGetCurrentDebugLocation2" ( pointer ) >
    self primitiveFailed
!

GetFunctionAttr2: Fn 
    "@param Fn: LLVMValueRef
     @return: uint64_t
    "

    <cdecl: uint64 "LLVMGetFunctionAttr2" ( LLVMValue ) >
    self primitiveFailed
!

GetIntrinsicByName: mod _: name _: count _: types 
    "@param mod: LLVMModuleRef
     @param name: *const char
     @param count: const int
     @param types: *const LLVMTypeRef
     @return: LLVMValueRef
    "

    <cdecl: LLVMValue "LLVMGetIntrinsicByName" ( LLVMModule charPointer int pointer ) >
    self primitiveFailed
!

GetMedadataKind: MD 
    "@param MD: LLVMMetadataRef
     @return: LLVMMetadataKind
    "

    <cdecl: int32 "LLVMGetMetadataKind" ( LLVMMetadata ) >
    self primitiveFailed
!

MDNode2: C _: MDs _: Count 
    "@param C: LLVMContextRef
     @param MDs: *LLVMMetadataRef
     @param Count: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMMDNode2" ( LLVMContext pointer uint ) >
    self primitiveFailed
!

MDString2: C _: Str _: SLen 
    "@param C: LLVMContextRef
     @param Str: *const char
     @param SLen: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMMDString2" ( LLVMContext charPointer uint ) >
    self primitiveFailed
!

MetadataAsValue: MD 
    "@param MD: LLVMMetadataRef
     @return: LLVMValueRef
    "

    <cdecl: LLVMValue "LLVMMetadataAsValue" ( LLVMMetadata ) >
    self primitiveFailed
!

MetadataAsValueInContext: C _: MD 
    "@param C: LLVMContextRef
     @param MD: LLVMMetadataRef
     @return: LLVMValueRef
    "

    <cdecl: LLVMValue "LLVMMetadataAsValueInContext" ( LLVMContext LLVMMetadata ) >
    self primitiveFailed
!

MetadataReplaceAllUsesWith: MD _: New 
    "@param MD: LLVMMetadataRef
     @param New: LLVMMetadataRef
     @return: void
    "

    <cdecl: void "LLVMMetadataReplaceAllUsesWith" ( LLVMMetadata LLVMMetadata ) >
    self primitiveFailed
!

ModuleAddModuleFlag: M _: Behavior _: Key _: Val 
    "@param M: LLVMModuleRef
     @param Behavior: LLVMModuleFlagBehavior
     @param Key: *const char
     @param Val: LLVMMetadataRef
     @return: void
    "

    <cdecl: void "LLVMModuleAddModuleFlag" ( LLVMModule int32 charPointer LLVMMetadata ) >
    self primitiveFailed
!

NewDIBuilder: m 
    "@param m: LLVMModuleRef
     @return: LLVMDIBuilderRef
    "

    <cdecl: LLVMDIBuilder "LLVMNewDIBuilder" ( LLVMModule ) >
    self primitiveFailed
!

RemoveFunctionAttr2: Fn _: PA 
    "@param Fn: LLVMValueRef
     @param PA: uint64_t
     @return: void
    "

    <cdecl: void "LLVMRemoveFunctionAttr2" ( LLVMValue uint64 ) >
    self primitiveFailed
!

SetCurrentDebugLocation2: Bref _: Line _: Col _: Scope _: InlinedAt 
    "@param Bref: LLVMBuilderRef
     @param Line: unsigned int
     @param Col: unsigned int
     @param Scope: LLVMMetadataRef
     @param InlinedAt: LLVMMetadataRef
     @return: void
    "

    <cdecl: void "LLVMSetCurrentDebugLocation2" ( pointer uint uint LLVMMetadata LLVMMetadata ) >
    self primitiveFailed
!

SetMetadata2: Inst _: KindID _: MD 
    "@param Inst: LLVMValueRef
     @param KindID: unsigned int
     @param MD: LLVMMetadataRef
     @return: void
    "

    <cdecl: void "LLVMSetMetadata2" ( LLVMValue uint LLVMMetadata ) >
    self primitiveFailed
!

TemporaryMDNode: C _: MDs _: Count 
    "@param C: LLVMContextRef
     @param MDs: *LLVMMetadataRef
     @param Count: unsigned int
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMTemporaryMDNode" ( LLVMContext pointer uint ) >
    self primitiveFailed
!

ValueAsMetadata: Value 
    "@param Value: LLVMValueRef
     @return: LLVMMetadataRef
    "

    <cdecl: LLVMMetadata "LLVMValueAsMetadata" ( LLVMValue ) >
    self primitiveFailed
!

ValueAsSInt64: Value 
    "@param Value: LLVMValueRef
     @return: int64_t
    "

    <cdecl: sint64 "LLVMValueAsSInt64" ( LLVMValue ) >
    self primitiveFailed
!

ValueAsUInt64: Value 
    "@param Value: LLVMValueRef
     @return: uint64_t
    "

    <cdecl: uint64 "LLVMValueAsUInt64" ( LLVMValue ) >
    self primitiveFailed
! !

!LLVMCEXT class methodsFor:'documentation'!

version
    ^ 'Path: jv/llvm_s/LLVMCEXT.st, Version: 1.0, User: jv, Time: 2015-08-10T19:13:47.892+01'
!

version_HG
    ^ 'Path: jv/llvm_s/LLVMCEXT.st, Version: 1.0, User: jv, Time: 2015-08-10T19:13:47.892+01'
! !