LLVMModule.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 10 Aug 2015 10:33:42 +0100
changeset 23 0744cd9c0acc
parent 21 64c5f01be2b3
child 24 7e7ddd55174c
permissions -rw-r--r--
Added an example of iterative factorial function It does not check for integer overflow as that would require using an intrinsic (which are not yet supported)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     1
"
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     2
    Copyright (C) 2015-now Jan Vrany
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     3
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     4
    This code is not an open-source (yet). You may use this code
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     5
    for your own experiments and projects, given that:
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     6
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     7
    * all modification to the code will be sent to the
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     8
      original author for inclusion in future releases
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
     9
    * this is not used in any commercial software
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    10
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    11
    This license is provisional and may (will) change in
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    12
    a future.
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    13
"
12
f98e97fd02ef Package renamed from jv:libllvms to jv:llvm_s
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 4
diff changeset
    14
"{ Package: 'jv:llvm_s' }"
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    18
LLVMDisposableObject subclass:#LLVMModule
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
	instanceVariableNames:''
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
	classVariableNames:''
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
	poolDictionaries:'LLVMTypeKind'
13
fa967c0e1827 Renamed class categories to begin with LLVM-S
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12
diff changeset
    22
	category:'LLVM-S-Core'
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
!
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
14
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    25
!LLVMModule class methodsFor:'documentation'!
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    26
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    27
copyright
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    28
"
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    29
    Copyright (C) 2015-now Jan Vrany
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    30
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    31
    This code is not an open-source (yet). You may use this code
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    32
    for your own experiments and projects, given that:
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    33
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    34
    * all modification to the code will be sent to the
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    35
      original author for inclusion in future releases
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    36
    * this is not used in any commercial software
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    37
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    38
    This license is provisional and may (will) change in
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    39
    a future.
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    40
"
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    41
! !
c7dea3fcc5a7 Added short README, license.txt and updated copyright information
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13
diff changeset
    42
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
!LLVMModule class methodsFor:'instance creation'!
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
newWithName: name
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    ^ LLVM ModuleCreateWithName: name
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    "Created: / 07-07-2015 / 20:22:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
4
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    51
!LLVMModule methodsFor:'accessing'!
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    52
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    53
dataLayoutString
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    54
    ^ LLVM GetDataLayout: self.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    55
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    56
    "Created: / 11-07-2015 / 06:57:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    57
! !
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    58
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
!LLVMModule methodsFor:'adding & removing'!
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
addFunctionNamed: name type: type
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
    self assert: name isSingleByteString.
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
    self assert: type kind == LLVMFunctionTypeKind.
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    ^ LLVM AddFunction: self _: name _: type.
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    "Created: / 07-07-2015 / 21:59:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    67
!
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    68
16
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    69
addGlobalNamed: name type: type value: value
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    70
    | global |
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    71
    self assert: name isSingleByteString.
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    72
    self assert:(type isKindOf: LLVMType).
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    73
    self assert:(value isKindOf: LLVMValue).
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    74
    self assert:(value type kind == type kind).
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    75
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    76
    global := LLVM AddGlobal: self _: type _: name.
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    77
    LLVM SetInitializer: global _: value.
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    78
    ^ global
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    79
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    80
    "Created: / 03-08-2015 / 16:41:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    81
!
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    82
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    83
addGlobalNamed: name value: value
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    84
    ^ self addGlobalNamed: name type: value type value: value
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    85
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    86
    "Created: / 03-08-2015 / 16:57:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    87
!
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    88
4
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    89
addMethodForClass: class selector: selector
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    90
    | name type typeObj typeIlcPtr argTypes|
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    91
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    92
    name := LLVMStXMethod llvmFunctionNameForClass: class selector: selector.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    93
    typeObj := LLVMType intptr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    94
    typeIlcPtr := LLVMType intptr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    95
    argTypes := LLVMObjectArray new: 4"receiver, selector, clsOrNil, pIlc" + selector numArgs.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    96
    1 to: argTypes size do:[:i | 
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    97
        argTypes at: i put: typeObj.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    98
    ].
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    99
    argTypes at: 4 put: typeIlcPtr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   100
    type := LLVMType function: argTypes  returning: typeObj.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   101
    ^ LLVM AddMethod: self _: name _: type.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   102
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   103
    "Created: / 11-07-2015 / 09:37:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
!LLVMModule methodsFor:'debugging'!
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   108
inspectorExtraAttributes 
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   109
    | d |
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   110
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   111
    d := super inspectorExtraAttributes.      
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   112
    d add: '-llvm ir' -> [ self dumpString ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   113
    d add: '-assembly' -> [ String streamContents:[:s | self writeAssemblyOn: s] ].
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   114
    ^ d
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   115
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   116
    "Created: / 10-07-2015 / 14:37:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   117
    "Modified: / 05-08-2015 / 23:47:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   118
! !
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   119
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   120
!LLVMModule methodsFor:'debugging-dumping'!
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   122
dumpOn: aStream
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   123
    aStream nextPutAll: self dumpString
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   124
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   125
    "Created: / 10-07-2015 / 14:32:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   126
!
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   127
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   128
dumpString
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   129
    | cstr str|
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   130
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   131
    cstr := LLVM PrintModuleToString: self.
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   132
    str := cstr copyCStringFromHeap.
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   133
    LLVM DisposeMessage: cstr.
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   134
    ^ str
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   135
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   136
    "Created: / 10-07-2015 / 14:31:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   139
!LLVMModule methodsFor:'initialization & release'!
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   140
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   141
dispose
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   142
    ^ LLVM DisposeModule: self
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   143
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   144
    "Modified: / 08-07-2015 / 22:40:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   145
! !
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   146
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   147
!LLVMModule methodsFor:'inspecting'!
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   148
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   149
inspector2TabASM
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   150
    <inspector2Tab>
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   151
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   152
    ^ (self newInspector2Tab)
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   153
        label:'Assembly';
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   154
        priority:50;
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   155
        text: [ String streamContents:[:s | self writeAssemblyOn: s] ];
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   156
        yourself
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   157
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   158
    "Created: / 05-08-2015 / 23:47:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   159
!
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   160
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   161
inspector2TabIR
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   162
    <inspector2Tab>
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   163
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   164
    ^ (self newInspector2Tab)
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   165
        label:'LLVM IR';
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   166
        priority:50;
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   167
        text: [ self dumpString ];
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   168
        yourself
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   169
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   170
    "Created: / 05-08-2015 / 23:29:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   171
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   172
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   173
!LLVMModule methodsFor:'writing-assembly'!
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   174
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   175
writeAssemblyOn: aStream
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   176
    | bitcode assembly |
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   177
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   178
    bitcode := Filename newTemporary.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   179
    self writeBitcodeToFile: bitcode.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   180
    assembly := bitcode withSuffix:'s'.  
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   181
    [ 
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   182
        (OperatingSystem executeCommand: (LLVMConfig bindir , Filename separator , 'llc ' , bitcode pathName)) ifFalse:[ 
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   183
            self error: 'Failed to generate assembly'.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   184
        ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   185
        aStream nextPutAll: assembly contents asString.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   186
    ] ensure:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   187
        bitcode remove.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   188
        assembly remove.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   189
    ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   190
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   191
    "Created: / 05-08-2015 / 23:46:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   192
    "Modified: / 07-08-2015 / 14:09:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   193
! !
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   194
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   195
!LLVMModule methodsFor:'writing-bitcode'!
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   196
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   197
writeBitcodeToFile: aStringOrFilename
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   198
    | file path |
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   199
    file := aStringOrFilename asFilename.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   200
    path := file pathName.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   201
    file exists ifTrue:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   202
        file isWritable ifFalse:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   203
            self error: 'File not writable (', file pathName , ')'.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   204
            ^ self.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   205
        ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   206
    ] ifFalse:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   207
        | dir |    
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   208
        dir := file directory.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   209
        dir exists ifFalse:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   210
            self error: 'Directory does not exists (', dir pathName , ')'.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   211
            ^ self.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   212
        ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   213
        dir isWritable ifFalse:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   214
            self error: 'Directory not writable (', dir pathName , ')'.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   215
            ^ self.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   216
        ]
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   217
    ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   218
    LLVM WriteBitcodeToFile: self  _: path.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   219
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   220
    "Created: / 05-08-2015 / 22:10:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   221
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   222
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   223
!LLVMModule class methodsFor:'documentation'!
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   224
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   225
version_HG
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   226
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   227
    ^ '$Changeset: <not expanded> $'
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   228
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   229