LLVMIRBuilder.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Fri, 17 Jun 2016 23:43:23 +0100
changeset 64 70dd75ab337c
parent 63 923ad3de94f3
child 66 0125c050d0f1
permissions -rw-r--r--
Renamed #store:_: to #store:at: which reads better
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: 9
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
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    18
LLVMDisposableObject subclass:#LLVMIRBuilder
38
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    19
	instanceVariableNames:'block'
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
	classVariableNames:''
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    21
	poolDictionaries:'LLVMIntPredicate LLVMRealPredicate 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
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    25
!LLVMIRBuilder class methodsFor:'documentation'!
14
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
! !
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    42
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    43
!LLVMIRBuilder class methodsFor:'instance creation'!
0
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
new
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    ^ LLVM CreateBuilder
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 / 22:38:15 / 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
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    51
!LLVMIRBuilder class methodsFor:'generators'!
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    52
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    53
instructions
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    54
    ^ #(
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    55
        add:to: (isIntegerOrVector isIntegerOrVector)
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    56
        lsrh:by: (isIntegerOrVector isIntegerOrVector)
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    57
    )
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    58
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    59
    "Created: / 11-07-2015 / 13:05:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    60
! !
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    61
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    62
!LLVMIRBuilder methodsFor:'accessing'!
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    63
38
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    64
block
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    65
    "Returns  the 'current' basic block as `anLLVMBasicBlock`"
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    66
44
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
    67
    block isNil ifTrue:[  
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
    68
        block := LLVM GetInsertBlock: self
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
    69
    ].
38
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    70
    ^ block
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    71
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    72
    "Created: / 15-09-2015 / 11:49:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
44
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
    73
    "Modified: / 23-09-2015 / 21:49:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
38
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    74
!
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
    75
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    76
block: anLLVMBasicBlock
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    77
    "Sets the 'current' basic block to `anLLVMBasicBlock` and
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    78
     position to it's end so that instructions will be generated
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    79
     at the end of the block."
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    80
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    81
    ^ self positionAtEnd: anLLVMBasicBlock
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    82
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    83
    "Created: / 10-08-2015 / 09:03:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
33
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
    84
!
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
    85
58
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    86
continue: anLLVMBasicBlock
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    87
    "Like block, but if current block has no terminator,
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    88
     add an unconditional jump to `anLLVMBasicBlock1` so
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    89
     exection continues there"
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    90
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    91
    | last |
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    92
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    93
    last := self block lastInstruction.
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    94
    (last isNil or:[ last isTerminatorInst not ]) ifTrue:[ 
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    95
        self br: anLLVMBasicBlock.
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    96
    ].
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    97
    ^ self positionAtEnd: anLLVMBasicBlock
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    98
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
    99
    "Created: / 20-04-2016 / 22:00:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   100
!
6b9f8fec013a Added convenience LLVMIRBuilder>>continue:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 57
diff changeset
   101
33
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   102
line: line column: column scope: scope
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   103
    "Sets the current location in original source (i.e., on source being
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   104
     translated to LLVM IR). This information is used generate debug information."
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   105
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   106
    ^ self line: line column: column scope: scope inlinedAt: nil
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   107
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   108
    "Created: / 15-08-2015 / 21:26:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   109
!
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   110
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   111
line: line column: column scope: scope inlinedAt: inlinedScope
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   112
    "Sets the current location in original source (i.e., on source being
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   113
     translated to LLVM IR). This information is used generate debug information."
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   114
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   115
    self assertIsIntegerUnsigned: line.
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   116
    self assertIsIntegerUnsigned: column.
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   117
    self assertIsMetadata: scope. 
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   118
    inlinedScope notNil ifTrue:[  
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   119
    self assertIsMetadata: inlinedScope.  
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   120
    ].
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   121
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   122
    LLVMCEXT SetCurrentDebugLocation2: self  _: line _: column _: scope _: inlinedScope
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   123
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   124
    "Created: / 15-08-2015 / 21:26:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   125
!
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   126
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   127
location
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   128
    "Return current location as LLVMMetadata."
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   129
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   130
    ^ LLVMCEXT GetCurrentDebugLocation2: self
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   131
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   132
    "Created: / 15-08-2015 / 23:52:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   133
! !
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   134
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   135
!LLVMIRBuilder methodsFor:'initialization & release'!
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   137
dispose
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   138
    ^ LLVM DisposeBuilder: self.
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   140
    "Modified (comment): / 08-07-2015 / 22:39:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   143
!LLVMIRBuilder methodsFor:'instructions - aggregates'!
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   144
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   145
extractvalue: value at: index
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   146
    ^ self extractvalue: value at: index as: ''
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   147
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   148
    "Created: / 10-08-2015 / 17:38:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   149
!
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   150
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   151
extractvalue: value at: index as: name
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   152
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   153
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   154
    self assertIsValue: value.
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   155
    self assert: ((value type kind == LLVMStructTypeKind) or:[ value type kind == LLVMArrayTypeKind ]) message: 'value is not a struct or an array'.
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   156
    self assert: index isInteger message: 'index is not an integer'.
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   157
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   158
    ^ LLVM BuildExtractValue: self _: value _: index _: name.
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   159
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   160
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   161
    "Created: / 10-08-2015 / 17:39:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   162
! !
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   163
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   164
!LLVMIRBuilder methodsFor:'instructions - binary'!
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   165
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   166
add:value1 _:value2 
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   167
    ^ self add:value1 _:value2 as:''
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   169
    "Created: / 07-07-2015 / 22:52:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   170
    "Modified (format): / 10-08-2015 / 09:42:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   171
!
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   172
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   173
add:value1 _:value2 as:name 
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   174
    self assertIsIntegerOrIntegerVectorValue: value1.  
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   175
    self assertIsIntegerOrIntegerVectorValue: value2.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   176
    self assertIsValueOfSameType: value1  as: value2. 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   177
    self assertIsString: name.  
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   178
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   179
    ^ LLVM BuildAdd:self _:value1 _:value2 _:name
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    "Created: / 07-07-2015 / 22:52:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   182
    "Modified: / 10-08-2015 / 09:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   183
!
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   184
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   185
and:value1 _:value2 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   186
    ^ self and:value1 _:value2 as:''
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   187
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   188
    "Created: / 07-08-2015 / 16:51:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   189
    "Modified: / 07-08-2015 / 17:56:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   190
!
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   191
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   192
and:value1 _:value2 as: name
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   193
    self assertIsIntegerOrIntegerVectorValue: value1.
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   194
    self assertIsValueOfSameType: value2 as: value1 .
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   195
    self assertIsString: name.  
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   196
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   197
    ^LLVM BuildAnd: self  _: value1 _: value2 _: name
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   198
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   199
    "Created: / 07-08-2015 / 17:56:42 / 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
   200
    "Modified: / 17-09-2015 / 19:34:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   201
!
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   202
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   203
ashr:value1 _:value2 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   204
    ^ self 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   205
            ashr:value1
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   206
            _:value2
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   207
            as:''
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   208
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   209
    "Created: / 11-07-2015 / 16:46:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
!
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   212
ashr:value1 _:value2 as:name 
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   213
    self assertIsIntegerOrIntegerVectorValue: value1.
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   214
    self assertIsValueOfSameType: value2 as: value1 .
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   215
    self assertIsString: name.  
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   216
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   217
    ^ LLVM 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   218
        BuildAShr:self
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   219
        _:value1
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   220
        _:value2
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   221
        _:name
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   222
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   223
    "Created: / 11-07-2015 / 16:46:43 / 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
   224
    "Modified: / 17-09-2015 / 19:34:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   225
!
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   226
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   227
lshr:value1 _:value2 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   228
    ^ self 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   229
            lshr:value1
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   230
            _:value2
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   231
            as:''
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   232
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   233
    "Created: / 11-07-2015 / 13:02:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   234
!
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   235
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   236
lshr:value1 _:value2 as:name 
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   237
    self assertIsIntegerOrIntegerVectorValue: value1.
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   238
    self assertIsValueOfSameType: value2 as: value1 .
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   239
    self assertIsString: name.  
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   240
    ^ LLVM 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   241
        BuildLShr:self
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   242
        _:value1
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   243
        _:value2
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   244
        _:name
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   245
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   246
    "Created: / 11-07-2015 / 14:49:13 / 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
   247
    "Modified: / 17-09-2015 / 19:34:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   248
!
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   249
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   250
mul:value1 _:value2 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   251
    ^ self mul:value1 _:value2 as:''
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   252
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   253
    "Created: / 10-08-2015 / 09:42:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   254
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   255
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   256
mul:value1 _:value2 as:name 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   257
    self assertIsIntegerOrIntegerVectorValue: value1.  
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   258
    self assertIsIntegerOrIntegerVectorValue: value2.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   259
    self assertIsValueOfSameType: value1  as: value2. 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   260
    self assertIsString: name.  
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   261
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   262
    ^ LLVM BuildMul:self _:value1 _:value2 _:name
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   263
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   264
    "Created: / 10-08-2015 / 09:41:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   265
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   266
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   267
or:value1 _:value2 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   268
    ^ self 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   269
            or:value1
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   270
            _:value2
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   271
            as:''
6
471feb9db560 Added LLVMBuilder>>or:and:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   272
471feb9db560 Added LLVMBuilder>>or:and:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   273
    "Created: / 11-07-2015 / 17:17:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
471feb9db560 Added LLVMBuilder>>or:and:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   274
!
471feb9db560 Added LLVMBuilder>>or:and:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   275
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   276
or:value1 _:value2 as:name 
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   277
    self assertIsIntegerOrIntegerVectorValue: value1.
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   278
    self assertIsValueOfSameType: value2 as: value1 .
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   279
    self assertIsString: name.  
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   280
    ^ LLVM 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   281
        BuildOr:self
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   282
        _:value1
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   283
        _:value2
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   284
        _:name
6
471feb9db560 Added LLVMBuilder>>or:and:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   285
471feb9db560 Added LLVMBuilder>>or:and:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   286
    "Created: / 11-07-2015 / 17:16:44 / 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
   287
    "Modified: / 17-09-2015 / 19:34:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6
471feb9db560 Added LLVMBuilder>>or:and:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   288
!
471feb9db560 Added LLVMBuilder>>or:and:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   289
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   290
shl:value1 _:value2
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   291
    ^ self shl:value1 _:value2 as:''
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   292
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   293
    "Created: / 11-07-2015 / 16:37:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   294
    "Modified (format): / 07-08-2015 / 17:58:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   295
!
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   297
shl:value1 _:value2 as:name 
43
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   298
    self assertIsIntegerOrIntegerVectorValue: value1.
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   299
    self assertIsValueOfSameType: value2 as: value1 .
597181c496f0 Added value-kind testing functions to LLVMValue
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 38
diff changeset
   300
    self assertIsString: name.  
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   301
    ^ LLVM 
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   302
        BuildShl:self
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   303
        _:value1
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   304
        _:value2
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   305
        _:name
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   306
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   307
    "Created: / 11-07-2015 / 16:37:05 / 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
   308
    "Modified: / 17-09-2015 / 19:35:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   309
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   310
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   311
sub:value1 _:value2 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   312
    ^ self sub:value1 _:value2 as:''
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   313
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   314
    "Created: / 10-08-2015 / 09:42:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   315
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   316
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   317
sub:value1 _:value2 as:name 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   318
    self assertIsIntegerOrIntegerVectorValue: value1.  
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   319
    self assertIsIntegerOrIntegerVectorValue: value2.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   320
    self assertIsValueOfSameType: value1  as: value2. 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   321
    self assertIsString: name.  
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   322
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   323
    ^ LLVM BuildSub:self _:value1 _:value2 _:name
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   324
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   325
    "Created: / 10-08-2015 / 09:42:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   326
! !
3ac0c9381634 Temporary commit
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   327
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   328
!LLVMIRBuilder methodsFor:'instructions - binary - compare'!
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   329
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   330
icmp:value1 _:value2 cond: cond
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   331
    ^ self icmp:value1 _:value2 cond: cond as: ''
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   332
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   333
    "Created: / 07-08-2015 / 18:39:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   334
!
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   335
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   336
icmp:value1 _:value2 cond: cond as: name
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   337
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   338
    self assertIsIntegerOrIntegerVectorValue:value1.      
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   339
    self assertIsIntegerOrIntegerVectorValue:value2.      
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   340
    self assertIsValueOfSameType:value1 as:value2.
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   341
    self assertIsString:name.      
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   342
    ^ LLVM BuildICmp: self  _: cond _:  value1 _: value2 _: name
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   343
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   344
    "Created: / 07-08-2015 / 18:18:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   345
! !
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   346
50
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   347
!LLVMIRBuilder methodsFor:'instructions - conversion'!
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   348
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   349
bitcast: value to: type
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   350
    ^ self bitcast: value to: type as: ''
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   351
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   352
    "Created: / 12-10-2015 / 18:37:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   353
!
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   354
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   355
bitcast: value to: type as: name
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   356
    self assertIsValue: value.
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   357
    self assertIsType: type.
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   358
    self assertIsString: name.
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   359
    ^ LLVM BuildBitCast: self  _: value _: type _: name.
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   360
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   361
    "Created: / 12-10-2015 / 18:36:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
57
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   362
!
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   363
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   364
int: value toPtr: type
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   365
    ^ self int: value toPtr: type as: ''
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   366
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   367
    "Created: / 11-02-2016 / 20:35:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   368
!
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   369
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   370
int: value toPtr: type as: name
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   371
    self assertIsIntegerValue: value.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   372
    self assertIsType: type.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   373
    self assert: type isPointerType description: 'Type is not an pointer type'.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   374
    self assertIsString: name.    
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   375
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   376
    ^ LLVM BuildIntToPtr: self  _: value _: type _: name.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   377
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   378
    "Created: / 11-02-2016 / 20:39:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   379
!
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   380
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   381
ptr: value toInt: type
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   382
    ^ self ptr: value toInt: type as: ''
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   383
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   384
    "Created: / 11-02-2016 / 20:40:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   385
!
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   386
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   387
ptr: value toInt: type as: name
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   388
    self assertIsValue: value.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   389
    self assert: value type isPointerType description: 'Value is not of an pointer type'.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   390
    self assertIsType: type.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   391
    self assert: type isIntegerType description: 'Type is not an integer type'.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   392
    self assertIsString: name.    
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   393
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   394
    ^ LLVM BuildPtrToInt: self  _: value _: type _: name.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   395
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   396
    "Created: / 11-02-2016 / 20:40:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   397
    "Modified: / 12-02-2016 / 11:55:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
50
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   398
! !
dbda820d4d24 Support for creating recursive structures.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 44
diff changeset
   399
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   400
!LLVMIRBuilder methodsFor:'instructions - memory'!
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   401
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   402
alloca: type
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   403
    ^ self alloca: type as: ''
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   404
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   405
    "Created: / 10-08-2015 / 06:33:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   406
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   407
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   408
alloca: type as: name
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   409
    self assertIsType: type.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   410
    self assertIsString: name.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   411
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   412
    ^ LLVM BuildAlloca: self _: type _: name
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   413
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   414
    "Created: / 10-08-2015 / 06:26:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   415
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   416
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   417
gep: pointer at: integerOrArrayOfIntegers
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   418
    ^ self gep: pointer at: integerOrArrayOfIntegers as: ''
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   419
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   420
    "Created: / 05-08-2015 / 20:58:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   421
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   422
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   423
gep: pointer at: integerOrArrayOfIntegers as: name
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   424
    | indices |
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   425
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   426
    self assertIsValue: pointer ofKind: LLVMPointerTypeKind.  
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   427
    self assert: (integerOrArrayOfIntegers isInteger 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   428
                    or:[ integerOrArrayOfIntegers isSequenceable and:[ integerOrArrayOfIntegers allSatisfy:[:e|e isInteger] ] ]).
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   429
    self assertIsString: name.  
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   430
    integerOrArrayOfIntegers isInteger ifTrue:[ 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   431
        indices := LLVMObjectArray with: (LLVMConstant uint32: integerOrArrayOfIntegers)
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   432
    ] ifFalse:[ 
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   433
        indices := LLVMObjectArray new: integerOrArrayOfIntegers size.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   434
        1 to: indices size do:[:i |
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   435
            indices at: i put: (LLVMConstant uint32: (integerOrArrayOfIntegers at: i)).
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   436
        ].
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   437
    ].
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   438
    ^ LLVM BuildGEP: self _: pointer _: indices _: indices size _: name.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   439
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   440
    "Created: / 05-08-2015 / 20:58:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   441
    "Modified: / 10-08-2015 / 17:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   442
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   443
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   444
load: pointer
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   445
    ^ self load: pointer as: ''
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   446
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   447
    "Created: / 10-08-2015 / 06:45:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   448
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   449
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   450
load: pointer as: name
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   451
    self assertIsValue: pointer.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   452
    self assertIsString: name.
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   453
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   454
    ^ LLVM BuildLoad: self _: pointer _: name
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   455
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   456
    "Created: / 10-08-2015 / 06:45:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   457
!
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   458
64
70dd75ab337c Renamed #store:_: to #store:at: which reads better
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 63
diff changeset
   459
store:value at:pointer 
70dd75ab337c Renamed #store:_: to #store:at: which reads better
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 63
diff changeset
   460
    self assertIsValue:value.
70dd75ab337c Renamed #store:_: to #store:at: which reads better
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 63
diff changeset
   461
    self assertIsValue:pointer.
70dd75ab337c Renamed #store:_: to #store:at: which reads better
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 63
diff changeset
   462
    ^ LLVM 
70dd75ab337c Renamed #store:_: to #store:at: which reads better
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 63
diff changeset
   463
        BuildStore:self
70dd75ab337c Renamed #store:_: to #store:at: which reads better
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 63
diff changeset
   464
        _:value
70dd75ab337c Renamed #store:_: to #store:at: which reads better
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 63
diff changeset
   465
        _:pointer
23
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   466
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   467
    "Created: / 10-08-2015 / 06:45:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   468
! !
0744cd9c0acc Added an example of iterative factorial function
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   469
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   470
!LLVMIRBuilder methodsFor:'instructions - other'!
9
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   471
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   472
call: function _: args
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   473
    ^ self call: function _: args as: ''.
9
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   474
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   475
    "Created: / 10-08-2015 / 18:53:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   476
!
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   477
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   478
call: function _: arguments as: name
9
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   479
    | argumentsArray argumentsSize |
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   480
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   481
    self assertIsFunctionValue: function.
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   482
    self assertIsValueArray: arguments.  
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   483
    self assertIsString: name.
9
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   484
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   485
    argumentsSize := arguments size.
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   486
    argumentsArray := arguments asLLVMObjectArray.
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   487
    ^ LLVM BuildCall: self _: function _: argumentsArray _: argumentsSize _: name
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   488
24
7e7ddd55174c Added support for intrinsics.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   489
    "Created: / 10-08-2015 / 18:53:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
57
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   490
!
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   491
61
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   492
phi: incoming
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   493
    ^ self phi: incoming as: ''
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   494
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   495
    "Created: / 21-04-2016 / 22:14:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   496
!
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   497
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   498
phi: incoming as: name
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   499
    "Create a PHI code from `incoming` values. An incoming value (i.e., an element
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   500
     of `incomming` array) must be either an instruction (i.e., a LLVMValue for an
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   501
     instruction) or an association LLVMBasicBlock -> LLVMValue."
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   502
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   503
    | insn type values blocks |
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   504
    self assert: (incoming isSequenceable and:[incoming isString not]) message: 'Incoming is not a sequenceable collection'.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   505
    incoming do:[:assocOrValue |
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   506
        | t |
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   507
        assocOrValue isAssociation ifTrue:[ 
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   508
            self assert: assocOrValue key isLLVMBasicBlock message: 'Invalid incoming value - association key is not an LLVMBasicBlock'.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   509
            self assert: assocOrValue value isLLVMValue message: 'Invalid incoming value - association value is not an LLVMValue'.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   510
            t := assocOrValue value type.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   511
        ] ifFalse:[ 
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   512
            self assert: assocOrValue isLLVMValue message: 'Invalid incoming value - value is not an LLVMValue'.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   513
            self assert: assocOrValue isInstruction message: 'Invalid incoming value - value is not an instruction'.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   514
            t := assocOrValue type.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   515
        ].
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   516
        type isNil ifTrue:[ 
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   517
            type := t
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   518
        ] ifFalse:[ 
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   519
            self assert: type = t message: 'Invalid incoming values - types differ'.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   520
        ].
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   521
    ].
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   522
    self assertIsString: name.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   523
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   524
    values := (incoming collect:[ :assocOrValue | assocOrValue value]) asLLVMObjectArray.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   525
    blocks := (incoming collect:[ :assocOrValue | assocOrValue isAssociation ifTrue:[assocOrValue key] ifFalse:[assocOrValue parent]]) asLLVMObjectArray.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   526
    insn := LLVM BuildPhi: self _: incoming first value type _: name.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   527
    LLVM AddIncoming: insn _: values _: blocks _: incoming size.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   528
    ^ insn.
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   529
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   530
    "Created: / 21-04-2016 / 21:30:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   531
    "Modified: / 22-04-2016 / 09:08:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   532
!
c2e287d54de5 Added support for PHI nodes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 58
diff changeset
   533
57
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   534
select: condition then: then else: else
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   535
    ^ self select: condition then: then else: else as: ''
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   536
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   537
    "Created: / 09-02-2016 / 20:39:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   538
!
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   539
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   540
select: cond then: then else: else as: name
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   541
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   542
    self assertIsValue: cond ofType: LLVMType int1.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   543
    self assertIsValueOfSameType: then  as: else. 
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   544
    self assertIsString: name.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   545
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   546
    ^ LLVM BuildSelect: self  _: cond _: then _: else _: name.
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   547
4ca7c3a327a2 LLVMDIBuilder: added API for more instructions
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 50
diff changeset
   548
    "Created: / 09-02-2016 / 20:40:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   549
! !
540c1c31a33d Added basic support for calling functions.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6
diff changeset
   550
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   551
!LLVMIRBuilder methodsFor:'instructions - terminators'!
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   552
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   553
br: target
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   554
    | targetAsValue  |
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   555
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   556
    targetAsValue := target asLLVMValue.
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   557
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   558
    self assertIsBasicBlockValue: targetAsValue.
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   559
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   560
    ^ LLVM BuildBr: self _: targetAsValue
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   561
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   562
    "Created: / 08-08-2015 / 02:59:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   563
!
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   564
63
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   565
if: cond then: then 
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   566
    ^ self if: cond then: then as: ''
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   567
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   568
    "Created: / 09-06-2016 / 01:13:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   569
!
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   570
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   571
if: cond then: then as: name
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   572
    ^ self if: cond then: then else: nil as: name
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   573
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   574
    "Created: / 09-06-2016 / 01:14:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   575
!
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   576
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   577
if: cond then: then else: else
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   578
    ^ self if: cond then: then else: else as: ''
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   579
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   580
    "Created: / 08-08-2015 / 04:15:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   581
!
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   582
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   583
if: cond then: then else: else as: name
62
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   584
    | thenAsValue elseAsValue blockForm insn |
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   585
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   586
    self assertIsValue: cond ofType: LLVMType int1.
63
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   587
    blockForm := then isBlock and:[ else isNil or:[else isBlock] ].
62
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   588
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   589
    blockForm ifTrue: [
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   590
        | thenBlock  elseBlock joinBlock |
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   591
62
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   592
        thenBlock := block function addBasicBlock.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   593
        elseBlock := block function addBasicBlock.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   594
        thenAsValue := thenBlock asLLVMValue.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   595
        elseAsValue := elseBlock asLLVMValue.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   596
        insn := LLVM BuildCondBr: self _: cond _: thenAsValue _: elseAsValue.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   597
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   598
        self block: thenBlock.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   599
        then value.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   600
        thenBlock isTerminated ifFalse:[ 
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   601
            joinBlock := block function addBasicBlock. 
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   602
            self br: joinBlock 
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   603
        ].
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   604
62
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   605
        self block: elseBlock.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   606
        else value.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   607
        elseBlock isTerminated ifFalse:[ 
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   608
            joinBlock isNil ifTrue:[
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   609
                joinBlock := block function addBasicBlock. 
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   610
            ].
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   611
            self br: joinBlock 
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   612
        ].
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   613
62
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   614
        joinBlock notNil ifTrue:[
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   615
            self block: joinBlock.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   616
        ].
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   617
    ] ifFalse:[
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   618
        thenAsValue := then asLLVMValue.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   619
        elseAsValue := else asLLVMValue.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   620
        self assertIsBasicBlockValue: thenAsValue.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   621
        self assertIsBasicBlockValue: elseAsValue.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   622
        insn := LLVM BuildCondBr: self _: cond _: thenAsValue _: elseAsValue.
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   623
    ].
2936ec426df6 Added 'block form' of #if:then:else: for easier use
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 61
diff changeset
   624
    ^ insn.
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   625
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   626
    "Created: / 07-08-2015 / 18:42:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
63
923ad3de94f3 Tests: Added LLBMIRBuilderTests
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 62
diff changeset
   627
    "Modified: / 09-06-2016 / 01:14:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   628
!
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   629
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   630
ret
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   631
    ^ LLVM BuildRetVoid: self
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   632
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   633
    "Created: / 07-08-2015 / 18:14:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   634
!
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   635
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   636
ret:value1
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   637
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   638
    self assertIsValue: value1.
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   639
    ^ LLVM BuildRet: self _: value1
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   640
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
    "Created: / 07-07-2015 / 22:55:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
22
789a35bd30ac Added example for compiling conditional. Added convenience API to simply code generation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   642
    "Modified: / 08-08-2015 / 03:11:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   643
! !
38af781b75ab First shot.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   644
28
97013ae2abae Renamed LLVMBuilder to LLVMIRBuilder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   645
!LLVMIRBuilder methodsFor:'positioning'!
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   646
38
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   647
positionAtEnd: aLLVMBasicBlock
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   648
    self assertIsBasicBlock: aLLVMBasicBlock.
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   649
    LLVM PositionBuilderAtEnd: self  _: aLLVMBasicBlock.
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   650
    block := aLLVMBasicBlock
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   651
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   652
    "Created: / 07-07-2015 / 22:45:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
38
52be9bfdf7e1 Added LLVMIRBuilder>>block returning current insertion block
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 33
diff changeset
   653
    "Modified: / 15-09-2015 / 18:16:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
44
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   654
!
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   655
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   656
positionBefore: anLLVMValue
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   657
    self assertIsInstruction: anLLVMValue.
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   658
    LLVM PositionBuilderBefore: self  _: anLLVMValue.
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   659
    block := nil.
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   660
8cade0a4d22e IR Builder: Added #positionBefore:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 43
diff changeset
   661
    "Created: / 23-09-2015 / 21:28:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   662
! !
e3dcb6272f0b Introduced abstract superclasses LLVMObject and LLVMDisposableObject
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   663
33
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   664
!LLVMIRBuilder class methodsFor:'documentation'!
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   665
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   666
version_HG
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   667
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   668
    ^ '$Changeset: <not expanded> $'
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   669
! !
feabf14b6c1d Initial support for generating (DWARF) debug info.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 28
diff changeset
   670