LLVMModule.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 10 Aug 2015 19:26:29 +0100
changeset 24 7e7ddd55174c
parent 21 64c5f01be2b3
child 33 feabf14b6c1d
permissions -rw-r--r--
Added support for intrinsics. As access to intrinsics is not exposed by LLVM-C API, a custom C++ library exposing those hase been added - llvm_c_ext. Smalltalk binds to this library in addition to LLVM's. In a future this library will expose whatever C++ API will be needed in scope of this project. However, it's designed to usable standalone, i.e., it contains no Smalltalk-specic code.
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
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    62
    self assertIsString: name.  
0
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>"
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    67
    "Modified: / 10-08-2015 / 17:07:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    68
!
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    69
16
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    70
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
    71
    | global |
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    72
    self assertIsString: name.  
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    73
    self assertIsType: type.  
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    74
    self assertIsValue: value ofType: type.
16
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>"
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
    81
    "Modified: / 10-08-2015 / 17:07:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
16
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
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    84
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
    85
    ^ 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
    86
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    87
    "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
    88
!
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
    89
4
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    90
addMethodForClass: class selector: selector
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    91
    | name type typeObj typeIlcPtr argTypes|
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    92
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    93
    name := LLVMStXMethod llvmFunctionNameForClass: class selector: selector.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    94
    typeObj := LLVMType intptr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    95
    typeIlcPtr := LLVMType intptr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    96
    argTypes := LLVMObjectArray new: 4"receiver, selector, clsOrNil, pIlc" + selector numArgs.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    97
    1 to: argTypes size do:[:i | 
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    98
        argTypes at: i put: typeObj.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    99
    ].
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   100
    argTypes at: 4 put: typeIlcPtr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   101
    type := LLVMType function: argTypes  returning: typeObj.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   102
    ^ LLVM AddMethod: self _: name _: type.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   103
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   104
    "Created: / 11-07-2015 / 09:37:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   105
!
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   106
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   107
getIntrinsicNamed: name types: types
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   108
    self assertIsString: name.  
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   109
    self assertIsTypeArray: types.
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   110
    ^ LLVMCEXT GetIntrinsicByName: self _: name _: types size _: types asLLVMObjectArray.
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   111
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   112
    "Created: / 10-08-2015 / 17:06:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
!LLVMModule methodsFor:'debugging'!
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   117
inspectorExtraAttributes 
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   118
    | d |
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
    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
   121
    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
   122
    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
   123
    ^ d
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: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
   126
    "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
   127
! !
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   128
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   129
!LLVMModule methodsFor:'debugging-dumping'!
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   131
dumpOn: aStream
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   132
    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
   133
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   134
    "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
   135
!
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   136
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   137
dumpString
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   138
    | cstr str|
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   139
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   140
    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
   141
    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
   142
    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
   143
    ^ str
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   144
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   145
    "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
   146
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   148
!LLVMModule methodsFor:'initialization & release'!
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   149
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   150
dispose
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   151
    ^ LLVM DisposeModule: self
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   152
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   153
    "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
   154
! !
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   155
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   156
!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
   157
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   158
inspector2TabASM
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   159
    <inspector2Tab>
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   160
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   161
    ^ (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
   162
        label:'Assembly';
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   163
        priority:49;
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   164
        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
   165
        yourself
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   166
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   167
    "Created: / 05-08-2015 / 23:47:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   168
    "Modified: / 10-08-2015 / 17:49:54 / 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
   169
!
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   170
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   171
inspector2TabIR
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   172
    <inspector2Tab>
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   173
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   174
    ^ (self newInspector2Tab)
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   175
        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
   176
        priority:50;
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   177
        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
   178
        yourself
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   179
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   180
    "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
   181
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   182
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   183
!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
   184
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   185
writeAssemblyOn: aStream
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   186
    | bitcode assembly |
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   187
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   188
    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
   189
    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
   190
    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
   191
    [ 
21
64c5f01be2b3 Introduced class LLVMConfig to abstract a particular LLVM version
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
   192
        (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
   193
            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
   194
        ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   195
        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
   196
    ] ensure:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   197
        bitcode remove.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   198
        assembly remove.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   199
    ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   200
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   201
    "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
   202
    "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
   203
! !
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   204
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   205
!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
   206
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   207
writeBitcodeToFile: aStringOrFilename
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   208
    | file path |
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   209
    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
   210
    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
   211
    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
   212
        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
   213
            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
   214
            ^ self.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   215
        ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   216
    ] ifFalse:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   217
        | dir |    
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   218
        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
   219
        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
   220
            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
   221
            ^ self.
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
        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
   224
            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
   225
            ^ self.
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
    ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   228
    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
   229
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   230
    "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
   231
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   232
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   233
!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
   234
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   235
version_HG
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   236
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   237
    ^ '$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
   238
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   239