LLVMModule.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 30 Aug 2016 16:57:29 +0100
changeset 78 7a4c769a9fea
parent 65 9244f78bcf02
permissions -rw-r--r--
llvm_c_ext: Improved `LLVMSetMetadata2()` to support also function values ...in addition to instruction values. This is handy to attach data to functions, such as debugging information. Added Smalltalk API for setting metadata nodes on instructions and functions.
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:''
65
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
    21
	poolDictionaries:'LLVMTypeKind LLVMVerifierFailureAction'
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
35
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    45
new
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    46
    ^ self newWithName: 'm'
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    47
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    48
    "Created: / 03-09-2015 / 06:41:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    49
!
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    50
37
0933f973bc22 Add assertion to LLVMModule>>newWithName: to check for nil name. Fixed skip-in-debugger pragma (typo)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    51
newWithName: aString
0933f973bc22 Add assertion to LLVMModule>>newWithName: to check for nil name. Fixed skip-in-debugger pragma (typo)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    52
    
0933f973bc22 Add assertion to LLVMModule>>newWithName: to check for nil name. Fixed skip-in-debugger pragma (typo)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    53
    self assertIsString: aString.
0933f973bc22 Add assertion to LLVMModule>>newWithName: to check for nil name. Fixed skip-in-debugger pragma (typo)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    54
    ^ LLVM ModuleCreateWithName: aString
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
    "Created: / 07-07-2015 / 20:22:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
37
0933f973bc22 Add assertion to LLVMModule>>newWithName: to check for nil name. Fixed skip-in-debugger pragma (typo)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 35
diff changeset
    57
    "Modified: / 14-09-2015 / 10:39:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
4
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    60
!LLVMModule methodsFor:'accessing'!
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    61
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    62
dataLayoutString
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    63
    ^ LLVM GetDataLayout: self.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    64
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    65
    "Created: / 11-07-2015 / 06:57:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
33
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    66
!
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    67
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    68
debugInfoBuilder
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    69
    ^ LLVMDIBuilder newForModule: self
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    70
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    71
    "Created: / 13-08-2015 / 06:35:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
35
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    72
!
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    73
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    74
getFunctionNamed: name 
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
    75
    self assertIsString: name. 
35
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    76
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
    77
    ^ LLVM GetNamedFunction: self  _: name.
35
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    78
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    79
    "Created: / 02-09-2015 / 22:27:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
    80
    "Modified (format): / 18-09-2015 / 06:15:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
35
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    81
!
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    82
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    83
getIntrinsicNamed: name 
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    84
    ^ self getIntrinsicNamed: name types: #().
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    85
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    86
    "Created: / 14-08-2015 / 14:10:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    87
    "Modified: / 03-09-2015 / 06:35:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    88
!
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    89
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    90
getIntrinsicNamed: name types: types
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    91
    self assertIsString: name.  
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    92
    self assertIsTypeArray: types.
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
    93
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
    94
    ^ LLVMCEXT GetIntrinsicByName: self _: name _: types size _: types asLLVMObjectArray.
35
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    95
fd459b38f324 Added LLVMModule>>getFunctionNamed:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    96
    "Created: / 10-08-2015 / 17:06:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
    97
    "Modified (format): / 18-09-2015 / 06:15:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4
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
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
!LLVMModule methodsFor:'adding & removing'!
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
33
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   102
addFlag: key value: value behavior: behavior
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   103
    self assertIsString: key.
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   104
    self assertIsMetadata: value.
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   105
    self assertIsIntegerUnsigned: behavior.
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   106
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   107
    LLVMCEXT ModuleAddModuleFlag: self _: behavior _: key _: value
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   108
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   109
    "Created: / 15-08-2015 / 06:58:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   110
    "Modified (format): / 15-08-2015 / 22:06:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   111
!
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   112
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
addFunctionNamed: name type: type
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   114
    self assertIsString: name.  
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    self assert: type kind == LLVMFunctionTypeKind.
33
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   116
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   117
    ^ LLVM AddFunction: self _: name _: type.
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
    "Created: / 07-07-2015 / 21:59:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   120
    "Modified: / 18-09-2015 / 06:15:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   121
!
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   122
16
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
   123
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
   124
    | global |
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   125
    self assertIsString: name.  
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   126
    self assertIsType: type.  
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   127
    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
   128
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
   129
    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
   130
    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
   131
    ^ global
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
   132
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
   133
    "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
   134
    "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
   135
!
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
   136
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
   137
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
   138
    ^ 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
   139
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
   140
    "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
   141
!
23e82cf19788 Tests refactored to be actually a testcase. Introduced LLVMConstant class
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14
diff changeset
   142
4
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   143
addMethodForClass: class selector: selector
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   144
    | name type typeObj typeIlcPtr argTypes|
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   145
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   146
    name := LLVMStXMethod llvmFunctionNameForClass: class selector: selector.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   147
    typeObj := LLVMType intptr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   148
    typeIlcPtr := LLVMType intptr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   149
    argTypes := LLVMObjectArray new: 4"receiver, selector, clsOrNil, pIlc" + selector numArgs.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   150
    1 to: argTypes size do:[:i | 
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   151
        argTypes at: i put: typeObj.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   152
    ].
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   153
    argTypes at: 4 put: typeIlcPtr.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   154
    type := LLVMType function: argTypes  returning: typeObj.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   155
    ^ LLVM AddMethod: self _: name _: type.
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   156
d33c64726c86 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   157
    "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
   158
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
!LLVMModule methodsFor:'debugging'!
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   162
inspectorExtraAttributes 
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   163
    | d |
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   164
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   165
    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
   166
    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
   167
    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
   168
    ^ d
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   169
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   170
    "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
   171
    "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
   172
! !
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   173
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   174
!LLVMModule methodsFor:'debugging-dumping'!
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   176
dumpOn: aStream
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   177
    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
   178
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   179
    "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
   180
!
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   181
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   182
dumpString
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   183
    | cstr str|
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   184
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   185
    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
   186
    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
   187
    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
   188
    ^ str
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   189
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   190
    "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
   191
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   193
!LLVMModule methodsFor:'initialization & release'!
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   194
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   195
dispose
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   196
    ^ LLVM DisposeModule: self
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   197
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   198
    "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
   199
! !
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   200
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   201
!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
   202
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   203
inspector2TabASM
2
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   204
    <inspector2Tab>
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   205
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   206
    ^ (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
   207
        label:'Assembly';
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 21
diff changeset
   208
        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
   209
        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
   210
        yourself
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   211
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   212
    "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
   213
    "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
   214
!
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
inspector2TabIR
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   217
    <inspector2Tab>
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   218
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   219
    ^ (self newInspector2Tab)
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   220
        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
   221
        priority:50;
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   222
        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
   223
        yourself
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   224
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   225
    "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
   226
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   227
65
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   228
!LLVMModule methodsFor:'utilities'!
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   229
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   230
verify
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   231
    "Verifies that a module is valid. If yes, this method is no-op.
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   232
     If false, throws LLVMModuleVerificationError."
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   233
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   234
    | msgPtr msg |
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   235
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   236
    msgPtr := ExternalBytes new: ExternalBytes sizeofPointer.
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   237
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   238
    (LLVM VerifyModule: self _: LLVMReturnStatusAction _: msgPtr) ifTrue:[
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   239
        msg := (msgPtr pointerAt: 1) copyCStringFromHeap.
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   240
        LLVM DisposeMessage: (msgPtr pointerAt: 1).
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   241
        LLVMModuleVerificationError signal: msg.  
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   242
    ].
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   243
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   244
    "Created: / 18-06-2016 / 15:48:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   245
! !
9244f78bcf02 Added LLVMModule>>verify and LLVMFunction>>verify
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   246
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   247
!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
   248
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   249
writeAssemblyOn: aStream
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   250
    | bitcode assembly |
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   251
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   252
    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
   253
    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
   254
    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
   255
    [ 
38
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   256
        | errorOutput |
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   257
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   258
        errorOutput := String new writeStream.
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   259
        (OperatingSystem executeCommand: (LLVMConfig bindir , Filename separator , 'llc ' , bitcode pathName) errorTo: errorOutput) ifTrue:[
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   260
            aStream nextPutAll: assembly contents asString.
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   261
        ] ifFalse:[ 
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   262
            aStream nextPutAll: 'Failed to generate assembly:'; cr; cr.
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   263
            aStream nextPutAll: errorOutput contents
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   264
        ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   265
    ] ensure:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   266
        bitcode remove.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   267
        assembly remove.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   268
    ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   269
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   270
    "Created: / 05-08-2015 / 23:46:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
38
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 37
diff changeset
   271
    "Modified: / 15-09-2015 / 18:21:59 / 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
   272
! !
53abac7217de Added support for creating execution engines and fetching function addresses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   273
20
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   274
!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
   275
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   276
writeBitcodeToFile: aStringOrFilename
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   277
    | file path |
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   278
    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
   279
    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
   280
    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
   281
        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
   282
            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
   283
            ^ self.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   284
        ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   285
    ] ifFalse:[ 
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   286
        | dir |    
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   287
        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
   288
        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
   289
            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
   290
            ^ self.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   291
        ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   292
        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
   293
            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
   294
            ^ self.
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   295
        ]
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   296
    ].
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   297
    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
   298
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   299
    "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
   300
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   301
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   302
!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
   303
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   304
version_HG
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   305
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   306
    ^ '$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
   307
! !
29174b92f44a Added inspector tab to show generated assembly for a module
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   308