rltk 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +21 -22
- data/lib/rltk/ast.rb +185 -118
- data/lib/rltk/cfg.rb +157 -103
- data/lib/rltk/cg/basic_block.rb +19 -19
- data/lib/rltk/cg/bindings.rb +16 -16
- data/lib/rltk/cg/builder.rb +129 -129
- data/lib/rltk/cg/context.rb +7 -7
- data/lib/rltk/cg/contractor.rb +7 -7
- data/lib/rltk/cg/execution_engine.rb +30 -30
- data/lib/rltk/cg/function.rb +37 -37
- data/lib/rltk/cg/generated_bindings.rb +3932 -3932
- data/lib/rltk/cg/generic_value.rb +17 -17
- data/lib/rltk/cg/instruction.rb +116 -116
- data/lib/rltk/cg/llvm.rb +22 -22
- data/lib/rltk/cg/memory_buffer.rb +7 -7
- data/lib/rltk/cg/module.rb +73 -73
- data/lib/rltk/cg/pass_manager.rb +35 -35
- data/lib/rltk/cg/target.rb +41 -41
- data/lib/rltk/cg/triple.rb +7 -7
- data/lib/rltk/cg/type.rb +75 -75
- data/lib/rltk/cg/value.rb +161 -161
- data/lib/rltk/lexer.rb +57 -57
- data/lib/rltk/lexers/calculator.rb +7 -7
- data/lib/rltk/lexers/ebnf.rb +5 -5
- data/lib/rltk/parser.rb +338 -295
- data/lib/rltk/parsers/infix_calc.rb +7 -7
- data/lib/rltk/parsers/postfix_calc.rb +3 -3
- data/lib/rltk/parsers/prefix_calc.rb +3 -3
- data/lib/rltk/token.rb +13 -13
- data/lib/rltk/version.rb +6 -6
- data/test/cg/tc_basic_block.rb +17 -17
- data/test/cg/tc_control_flow.rb +41 -41
- data/test/cg/tc_function.rb +4 -4
- data/test/cg/tc_generic_value.rb +3 -3
- data/test/cg/tc_instruction.rb +53 -53
- data/test/cg/tc_math.rb +12 -12
- data/test/cg/tc_module.rb +14 -14
- data/test/cg/tc_transforms.rb +11 -11
- data/test/cg/tc_type.rb +12 -12
- data/test/cg/tc_value.rb +35 -35
- data/test/cg/ts_cg.rb +5 -5
- data/test/tc_ast.rb +137 -60
- data/test/tc_cfg.rb +34 -34
- data/test/tc_lexer.rb +42 -42
- data/test/tc_parser.rb +250 -173
- data/test/tc_token.rb +2 -2
- data/test/ts_rltk.rb +8 -8
- metadata +84 -85
- data/lib/rltk/cg/old_generated_bindings.rb +0 -6152
@@ -16,23 +16,23 @@ require 'rltk/cg/type'
|
|
16
16
|
#######################
|
17
17
|
|
18
18
|
module RLTK::CG
|
19
|
-
|
19
|
+
|
20
20
|
# GenericValue objects are used to pass parameters into
|
21
21
|
# {ExecutionEngine ExecutionEngines} as well as retreive an evaluated
|
22
22
|
# function's result. They may contain values of several different types:
|
23
|
-
#
|
23
|
+
#
|
24
24
|
# * Integer
|
25
25
|
# * Float
|
26
26
|
# * Boolean
|
27
27
|
class GenericValue
|
28
28
|
include BindingClass
|
29
|
-
|
29
|
+
|
30
30
|
# The Proc object called by the garbage collector to free resources used by LLVM.
|
31
31
|
CLASS_FINALIZER = Proc.new { |id| Bindings.dispose_generic_value(ptr) if ptr = ObjectSpace._id2ref(id).ptr }
|
32
|
-
|
32
|
+
|
33
33
|
# @return [Type] LLVM type of this GenericValue.
|
34
34
|
attr_reader :type
|
35
|
-
|
35
|
+
|
36
36
|
# Creates a new GenericValue from a given Ruby value.
|
37
37
|
#
|
38
38
|
# @param [FFI::Pointer, Integer, ::Float, Boolean] ruby_val
|
@@ -43,50 +43,50 @@ module RLTK::CG
|
|
43
43
|
case ruby_val
|
44
44
|
when FFI::Pointer
|
45
45
|
[ruby_val, nil]
|
46
|
-
|
46
|
+
|
47
47
|
when ::Integer
|
48
48
|
type = if type then check_cg_type(type, IntType) else NativeIntType.instance end
|
49
|
-
|
49
|
+
|
50
50
|
[Bindings.create_generic_value_of_int(type, ruby_val, signed.to_i), type]
|
51
|
-
|
51
|
+
|
52
52
|
when ::Float
|
53
53
|
type = if type then check_cg_type(type, RealType) else FloatType.instance end
|
54
|
-
|
54
|
+
|
55
55
|
[Bindings.create_generic_value_of_float(type, ruby_val), type]
|
56
|
-
|
56
|
+
|
57
57
|
when TrueClass
|
58
58
|
[Bindings.create_generic_value_of_int(Int1Type, 1, 0), Int1Type]
|
59
|
-
|
59
|
+
|
60
60
|
when FalseClass
|
61
61
|
[Bindings.create_generic_value_of_int(Int1Type, 0, 0), Int1Type]
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
# Define a finalizer to free the memory used by LLVM for this
|
65
65
|
# generic value.
|
66
66
|
ObjectSpace.define_finalizer(self, CLASS_FINALIZER)
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
# @param [Boolean] signed Treat the GenericValue as a signed integer.
|
70
70
|
#
|
71
71
|
# @return [Integer]
|
72
72
|
def to_i(signed = true)
|
73
73
|
val = Bindings.generic_value_to_int(@ptr, signed.to_i)
|
74
|
-
|
74
|
+
|
75
75
|
if signed and val >= 2**63 then val - 2**64 else val end
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
# @param [FloatType] type Type of the real value stored in this GenericValue.
|
79
79
|
#
|
80
80
|
# @return [Float]
|
81
81
|
def to_f(type = RLTK::CG::FloatType)
|
82
82
|
Bindings.generic_value_to_float(@type || check_cg_type(type, RLTK::CG::NumberType), @ptr)
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
# @return [Boolean]
|
86
86
|
def to_bool
|
87
87
|
self.to_i(false).to_bool
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
# @return [FFI::Pointer] GenericValue as a pointer.
|
91
91
|
def to_ptr_value
|
92
92
|
Bindings.generic_value_to_pointer(@ptr)
|
data/lib/rltk/cg/instruction.rb
CHANGED
@@ -16,10 +16,10 @@ require 'rltk/cg/value'
|
|
16
16
|
#######################
|
17
17
|
|
18
18
|
module RLTK::CG
|
19
|
-
|
19
|
+
|
20
20
|
# This class represents LLVM IR instructions.
|
21
21
|
class Instruction < User
|
22
|
-
|
22
|
+
|
23
23
|
# Many of the C functions for interacting with instructions treat
|
24
24
|
# all instructions as Instruction objects. However, some Instruction
|
25
25
|
# sub-types can be tested for. This is a list of those sub-types and
|
@@ -55,7 +55,7 @@ module RLTK::CG
|
|
55
55
|
:UIToFP,
|
56
56
|
:Unreachable
|
57
57
|
]
|
58
|
-
|
58
|
+
|
59
59
|
# Instantiate an Instruction object from a given pointer. The type
|
60
60
|
# of the instruction is tested and the appropriate sub-type is picked
|
61
61
|
# if possible. If not, a generic Instruction object is returned.
|
@@ -65,22 +65,22 @@ module RLTK::CG
|
|
65
65
|
# @return [Instruction] An Instruction or one of its sub-types.
|
66
66
|
def self.from_ptr(ptr)
|
67
67
|
match = nil
|
68
|
-
|
68
|
+
|
69
69
|
TESTABLE.each do |el|
|
70
70
|
klass, test =
|
71
71
|
if el.is_a?(Symbol)
|
72
72
|
[RLTK::CG.const_get("#{el}Inst".to_sym), Bindings.get_bname("IsA#{el}Inst")]
|
73
|
-
|
73
|
+
|
74
74
|
else
|
75
75
|
[RLTK::CG.const_get("#{el.first}Inst".to_sym), Bindings.get_bname("IsA#{el.last}Inst")]
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
match = klass if Bindings.send(test, ptr)
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
if match then match else Intruction end.new(ptr)
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
# You should never instantiate Instruction object directly. Use the
|
85
85
|
# builder class to add new instructions.
|
86
86
|
#
|
@@ -88,38 +88,38 @@ module RLTK::CG
|
|
88
88
|
def initialize(ptr)
|
89
89
|
@ptr = check_type(ptr, FFI::Pointer, 'ptr')
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
# @return [Instruction, nil] Instruction that follows the current one in a {BasicBlock}.
|
93
93
|
def next
|
94
94
|
if (ptr = Bindings.get_next_instruction(@ptr)).null? then nil else Instruction.from_ptr(ptr) end
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
97
|
# @return [BasicBlock] BasicBlock that contains this Instruction.
|
98
98
|
def parent
|
99
99
|
if (ptr = Bindings.get_instruction_parent(@ptr)).null? then nil else BasicBlock.new(ptr) end
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
# @return [Instruction, nil] Instruction that precedes the current on in a {BasicBlock}.
|
103
103
|
def previous
|
104
104
|
if (ptr = Bindings.get_previous_instruction(@ptr)).null? then nil else Instruction.from_ptr(ptr) end
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
##########################################
|
108
108
|
# Instruction Testing Method Definitions #
|
109
109
|
##########################################
|
110
|
-
|
110
|
+
|
111
111
|
selector = Regexp.new(/LLVMIsA.*Inst/)
|
112
112
|
syms = Symbol.all_symbols.select { |sym| selector.match(sym.to_s) }
|
113
|
-
|
113
|
+
|
114
114
|
syms.each do |sym|
|
115
115
|
sym = (Bindings.get_bname(sym).to_s + '?').to_sym
|
116
|
-
|
116
|
+
|
117
117
|
define_method(sym) do
|
118
118
|
Bindings.send(sym, @ptr)
|
119
119
|
end
|
120
120
|
end
|
121
121
|
end
|
122
|
-
|
122
|
+
|
123
123
|
# An Instruction representing a function call.
|
124
124
|
#
|
125
125
|
# @LLVMInst call
|
@@ -132,7 +132,7 @@ module RLTK::CG
|
|
132
132
|
def calling_convention
|
133
133
|
Bindings.enum_type(:call_conv)[Bindings.get_instruction_call_conv(@ptr)]
|
134
134
|
end
|
135
|
-
|
135
|
+
|
136
136
|
# Set the calling convention used for this call.
|
137
137
|
#
|
138
138
|
# @see Bindings._enum_call_conv_
|
@@ -140,15 +140,15 @@ module RLTK::CG
|
|
140
140
|
# @param [Symbol] conv Calling convention to set.
|
141
141
|
def calling_convention=(conv)
|
142
142
|
Bindings.set_instruction_call_conv(@ptr, Bindings.enum_type(:call_conv)[conv])
|
143
|
-
|
143
|
+
|
144
144
|
conv
|
145
145
|
end
|
146
|
-
|
146
|
+
|
147
147
|
# @return [Boolean]
|
148
148
|
def tail_call?
|
149
149
|
Bindings.is_tail_call(@ptr).to_bool
|
150
150
|
end
|
151
|
-
|
151
|
+
|
152
152
|
# Sets the *tail call* property for this call instruction.
|
153
153
|
#
|
154
154
|
# @param [Boolean] bool If this is a tail call or not
|
@@ -158,7 +158,7 @@ module RLTK::CG
|
|
158
158
|
Bindings.set_tail_call(@ptr, bool.to_i)
|
159
159
|
end
|
160
160
|
end
|
161
|
-
|
161
|
+
|
162
162
|
# An Instruction representing a Phi node.
|
163
163
|
#
|
164
164
|
# @see http://en.wikipedia.org/wiki/Static_single_assignment_form
|
@@ -168,16 +168,16 @@ module RLTK::CG
|
|
168
168
|
def incoming
|
169
169
|
@incoming_collection ||= IncomingCollection.new(self)
|
170
170
|
end
|
171
|
-
|
171
|
+
|
172
172
|
# This class is used to access a Phi node's incoming {BasicBlock}/{Value} pairs.
|
173
173
|
class IncomingCollection
|
174
174
|
include Enumerable
|
175
|
-
|
175
|
+
|
176
176
|
# @param [PhiInst] phi Phi instruction for which this is a proxy.
|
177
177
|
def initialize(phi)
|
178
178
|
@phi = phi
|
179
179
|
end
|
180
|
-
|
180
|
+
|
181
181
|
# Access the {BasicBlock}/{Value} pair at the given index.
|
182
182
|
#
|
183
183
|
# @param [Integer] index Index of the desired pair. May be negative.
|
@@ -185,12 +185,12 @@ module RLTK::CG
|
|
185
185
|
# @return [Array(BasicBlock, Value)]
|
186
186
|
def [](index)
|
187
187
|
index += self.size if index < 0
|
188
|
-
|
188
|
+
|
189
189
|
if 0 <= index and index < self.size
|
190
190
|
[self.block(index), self.value(index)]
|
191
191
|
end
|
192
192
|
end
|
193
|
-
|
193
|
+
|
194
194
|
# Add incoming {BasicBlock}/{Value} pairs to a Phi node.
|
195
195
|
#
|
196
196
|
# @example Adding a single block/value pair:
|
@@ -214,28 +214,28 @@ module RLTK::CG
|
|
214
214
|
[(keys = overloaded.keys), overloaded.values_at(*keys)]
|
215
215
|
end
|
216
216
|
end
|
217
|
-
|
217
|
+
|
218
218
|
vals_ptr = FFI::MemoryPointer.new(:pointer, vals.size)
|
219
219
|
vals_ptr.write_array_of_pointer(vals)
|
220
|
-
|
220
|
+
|
221
221
|
blks_ptr = FFI::MemoryPointer.new(:pointer, blks.size)
|
222
222
|
blks_ptr.write_array_of_pointer(blks)
|
223
|
-
|
223
|
+
|
224
224
|
nil.tap { Bindings.add_incoming(@phi, vals_ptr, blks_ptr, vals.length) }
|
225
225
|
end
|
226
226
|
alias :<< :add
|
227
|
-
|
227
|
+
|
228
228
|
# @param [Integer] index Index of desired incoming {BasicBlock}.
|
229
229
|
#
|
230
230
|
# @return [BasicBlock] Incoming {BasicBlock}.
|
231
231
|
def block(index)
|
232
232
|
index += self.size if index < 0
|
233
|
-
|
233
|
+
|
234
234
|
if 0 <= index and index < self.size
|
235
235
|
BasicBlock.new(Bindings.get_incoming_block(@phi, index))
|
236
236
|
end
|
237
237
|
end
|
238
|
-
|
238
|
+
|
239
239
|
# An iterator for each incoming {BasicBlock}/{Value} pair.
|
240
240
|
#
|
241
241
|
# @yieldparam pair [Array(BasicBlock, Value)]
|
@@ -243,30 +243,30 @@ module RLTK::CG
|
|
243
243
|
# @return [Enumerator] Returns an Enumerator if no block is given.
|
244
244
|
def each
|
245
245
|
return to_enum(:each) unless block_given?
|
246
|
-
|
246
|
+
|
247
247
|
self.size.times { |index| yield self[index] }
|
248
|
-
|
248
|
+
|
249
249
|
self
|
250
250
|
end
|
251
|
-
|
251
|
+
|
252
252
|
# @return [Integer] Number of incoming {BasicBlock}/{Value} pairs.
|
253
253
|
def size
|
254
254
|
Bindings.count_incoming(@phi)
|
255
255
|
end
|
256
|
-
|
256
|
+
|
257
257
|
# @param [Integer] index Index of desired incoming {Value}.
|
258
258
|
#
|
259
259
|
# @return [BasicBlock] Incoming {Value}.
|
260
260
|
def value(index)
|
261
261
|
index += self.size if index < 0
|
262
|
-
|
262
|
+
|
263
263
|
if 0 <= index and index < self.size
|
264
264
|
Value.new(Bindings.get_incoming_value(@phi, index))
|
265
265
|
end
|
266
266
|
end
|
267
267
|
end
|
268
268
|
end
|
269
|
-
|
269
|
+
|
270
270
|
# An Instruction representing a conditional jump with multiple cases.
|
271
271
|
#
|
272
272
|
# @LLVMInst switch
|
@@ -281,238 +281,238 @@ module RLTK::CG
|
|
281
281
|
Bindings.add_case(@ptr, val, block)
|
282
282
|
end
|
283
283
|
end
|
284
|
-
|
284
|
+
|
285
285
|
#############################
|
286
286
|
# Empty Instruction Classes #
|
287
287
|
#############################
|
288
|
-
|
288
|
+
|
289
289
|
# @LLVMInst add
|
290
290
|
class AddInst < Instruction; end
|
291
|
-
|
291
|
+
|
292
292
|
# @LLVMInst addr_space_cast
|
293
293
|
class AddrSpaceCastInst < Instruction; end
|
294
|
-
|
294
|
+
|
295
295
|
# @LLVMInst alloca
|
296
296
|
class AllocaInst < Instruction; end
|
297
|
-
|
297
|
+
|
298
298
|
# @LLVMInst and
|
299
299
|
class AndInst < Instruction; end
|
300
|
-
|
300
|
+
|
301
301
|
# @LLVMInst ashr
|
302
302
|
class ARightShiftInst < Instruction; end
|
303
|
-
|
303
|
+
|
304
304
|
# @LLVMInst alloca
|
305
305
|
class ArrayAllocaInst < Instruction; end
|
306
|
-
|
306
|
+
|
307
307
|
class ArrayMallocInst < Instruction; end
|
308
|
-
|
308
|
+
|
309
309
|
# @LLVMInst atomicrmw
|
310
310
|
class AtomicRMWInst < Instruction; end
|
311
|
-
|
311
|
+
|
312
312
|
# @LLVMInst bitcast
|
313
313
|
class BitCastInst < Instruction; end
|
314
|
-
|
314
|
+
|
315
315
|
# @LLVMInst br
|
316
316
|
class BranchInst < Instruction; end
|
317
|
-
|
317
|
+
|
318
318
|
# @LLVMInst br
|
319
319
|
class CondBranchInst < Instruction; end
|
320
|
-
|
320
|
+
|
321
321
|
# @LLVMInst sdiv
|
322
322
|
class ExactSDivInst < Instruction; end
|
323
|
-
|
323
|
+
|
324
324
|
# @LLVMInst extractelement
|
325
325
|
class ExtractElementInst < Instruction; end
|
326
|
-
|
326
|
+
|
327
327
|
# @LLVMInst extractvalue
|
328
328
|
class ExtractValueInst < Instruction; end
|
329
|
-
|
329
|
+
|
330
330
|
# @LLVMInst fadd
|
331
331
|
class FAddInst < Instruction; end
|
332
|
-
|
332
|
+
|
333
333
|
# @LLVMInst fcmp
|
334
334
|
class FCmpInst < Instruction; end
|
335
|
-
|
335
|
+
|
336
336
|
# @LLVMInst fdiv
|
337
337
|
class FDivInst < Instruction; end
|
338
|
-
|
338
|
+
|
339
339
|
# @LLVMInst fmul
|
340
340
|
class FMulInst < Instruction; end
|
341
|
-
|
341
|
+
|
342
342
|
# @LLVMInst fsub
|
343
343
|
class FNegInst < Instruction; end
|
344
|
-
|
344
|
+
|
345
345
|
# @LLVMInst fptosi
|
346
346
|
class FPToSIInst < Instruction; end
|
347
|
-
|
347
|
+
|
348
348
|
# @LLVMInst fptoui
|
349
349
|
class FPToUIInst < Instruction; end
|
350
|
-
|
350
|
+
|
351
351
|
class FPCastInst < Instruction; end
|
352
|
-
|
352
|
+
|
353
353
|
# @LLVMInst fpext
|
354
354
|
class FPExtendInst < Instruction; end
|
355
|
-
|
355
|
+
|
356
356
|
# @LLVMInst fptrunc
|
357
357
|
class FPTruncInst < Instruction; end
|
358
|
-
|
358
|
+
|
359
359
|
class FreeInst < Instruction; end
|
360
|
-
|
360
|
+
|
361
361
|
# @LLVMInst frem
|
362
362
|
class FRemInst < Instruction; end
|
363
|
-
|
363
|
+
|
364
364
|
# @LLVMInst fsub
|
365
365
|
class FSubInst < Instruction; end
|
366
|
-
|
366
|
+
|
367
367
|
# @LLVMInst gep
|
368
368
|
# @see http://llvm.org/docs/GetElementPtr.html
|
369
369
|
class GetElementPtrInst < Instruction; end
|
370
|
-
|
370
|
+
|
371
371
|
class GlobalStringInst < Instruction; end
|
372
372
|
class GlobalStringPtrInst < Instruction; end
|
373
|
-
|
373
|
+
|
374
374
|
# @LLVMInst gep
|
375
375
|
# @see http://llvm.org/docs/GetElementPtr.html
|
376
376
|
class InBoundsGEPInst < Instruction; end
|
377
|
-
|
377
|
+
|
378
378
|
# @LLVMInst insertelement
|
379
379
|
class InsertElementInst < Instruction; end
|
380
|
-
|
380
|
+
|
381
381
|
# @LLVMInst insertvalue
|
382
382
|
class InsertValueInst < Instruction; end
|
383
|
-
|
383
|
+
|
384
384
|
# @LLVMInst inttoptr
|
385
385
|
class IntToPtrInst < Instruction; end
|
386
|
-
|
386
|
+
|
387
387
|
class IntCastInst < Instruction; end
|
388
|
-
|
388
|
+
|
389
389
|
# @LLVMInst icmp
|
390
390
|
class IntCmpInst < Instruction; end
|
391
|
-
|
391
|
+
|
392
392
|
# @LLVMInst invoke
|
393
393
|
class InvokeInst < Instruction; end
|
394
|
-
|
394
|
+
|
395
395
|
class IsNotNullInst < Instruction; end
|
396
396
|
class IsNullInstInst < Instruction; end
|
397
|
-
|
397
|
+
|
398
398
|
# @LLVMInst shl
|
399
399
|
class LeftShiftInst < Instruction; end
|
400
|
-
|
400
|
+
|
401
401
|
# @LLVMInst load
|
402
402
|
class LoadInst < Instruction; end
|
403
|
-
|
403
|
+
|
404
404
|
# @LLVMInst lshr
|
405
405
|
class LRightShiftInst < Instruction; end
|
406
|
-
|
406
|
+
|
407
407
|
class MallocInst < Instruction; end
|
408
|
-
|
408
|
+
|
409
409
|
# @LLVMInst mul
|
410
410
|
class MulInst < Instruction; end
|
411
|
-
|
411
|
+
|
412
412
|
# @LLVMInst sub
|
413
413
|
class NegInst < Instruction; end
|
414
|
-
|
414
|
+
|
415
415
|
class NotInst < Instruction; end
|
416
|
-
|
416
|
+
|
417
417
|
# @LLVMInst add
|
418
418
|
class NSWAddInst < Instruction; end
|
419
|
-
|
419
|
+
|
420
420
|
# @LLVMInst mul
|
421
421
|
class NSWMulInst < Instruction; end
|
422
|
-
|
422
|
+
|
423
423
|
# @LLVMInst sub
|
424
424
|
class NSWNegInst < Instruction; end
|
425
|
-
|
425
|
+
|
426
426
|
# @LLVMInst sub
|
427
427
|
class NSWSubInst < Instruction; end
|
428
|
-
|
428
|
+
|
429
429
|
# @LLVMInst add
|
430
430
|
class NUWAddInst < Instruction; end
|
431
|
-
|
431
|
+
|
432
432
|
# @LLVMInst mul
|
433
433
|
class NUWMulInst < Instruction; end
|
434
|
-
|
434
|
+
|
435
435
|
# @LLVMInst sub
|
436
436
|
class NUWNegInst < Instruction; end
|
437
|
-
|
437
|
+
|
438
438
|
# @LLVMInst sub
|
439
439
|
class NUWSubInst < Instruction; end
|
440
|
-
|
440
|
+
|
441
441
|
# @LLVMInst or
|
442
442
|
class OrInst < Instruction; end
|
443
|
-
|
443
|
+
|
444
444
|
# @LLVMInst ptrtoint
|
445
445
|
class PtrToIntInst < Instruction; end
|
446
|
-
|
446
|
+
|
447
447
|
class PtrCastInst < Instruction; end
|
448
448
|
class PtrDiffInst < Instruction; end
|
449
|
-
|
449
|
+
|
450
450
|
# @LLVMInst ret
|
451
451
|
class ReturnInst < Instruction; end
|
452
|
-
|
452
|
+
|
453
453
|
# @LLVMInst ret
|
454
454
|
class ReturnAggregateInst < Instruction; end
|
455
|
-
|
455
|
+
|
456
456
|
# @LLVMInst ret
|
457
457
|
class ReturnVoidInst < Instruction; end
|
458
|
-
|
458
|
+
|
459
459
|
# @LLVMInst sdiv
|
460
460
|
class SDivInst < Instruction; end
|
461
|
-
|
461
|
+
|
462
462
|
# @LLVMInst select
|
463
463
|
class SelectInst < Instruction; end
|
464
|
-
|
464
|
+
|
465
465
|
# @LLVMInst shufflevector
|
466
466
|
class ShuffleVectorInst < Instruction; end
|
467
|
-
|
467
|
+
|
468
468
|
# @LLVMInst sext
|
469
469
|
class SignExtendInst < Instruction; end
|
470
|
-
|
470
|
+
|
471
471
|
# @LLVMInst sext
|
472
472
|
# @LLVMInst bitcast
|
473
473
|
class SignExtendOrBitCastInst < Instruction; end
|
474
|
-
|
474
|
+
|
475
475
|
# @LLVMInst sitofp
|
476
476
|
class SIToFPInst < Instruction; end
|
477
|
-
|
477
|
+
|
478
478
|
# @LLVMInst srem
|
479
479
|
class SRemInst < Instruction; end
|
480
|
-
|
480
|
+
|
481
481
|
# @LLVMInst store
|
482
482
|
class StoreInst < Instruction; end
|
483
|
-
|
483
|
+
|
484
484
|
# @LLVMInst gep
|
485
485
|
# @see http://llvm.org/docs/GetElementPtr.html
|
486
486
|
class StructGEPInst < Instruction; end
|
487
|
-
|
487
|
+
|
488
488
|
# @LLVMInst sub
|
489
489
|
class SubInst < Instruction; end
|
490
|
-
|
490
|
+
|
491
491
|
# @LLVMInst trunc
|
492
492
|
class TruncateInst < Instruction; end
|
493
|
-
|
493
|
+
|
494
494
|
# @LLVMInst trunc
|
495
495
|
# @LLVMInst bitcast
|
496
496
|
class TruncateOrBitCastInst < Instruction; end
|
497
|
-
|
497
|
+
|
498
498
|
# @LLVMInst udiv
|
499
499
|
class UDivInst < Instruction; end
|
500
|
-
|
500
|
+
|
501
501
|
# @LLVMInst uitofp
|
502
502
|
class UIToFPInst < Instruction; end
|
503
|
-
|
503
|
+
|
504
504
|
# @LLVMInst unreachable
|
505
505
|
class UnreachableInst < Instruction; end
|
506
|
-
|
506
|
+
|
507
507
|
# @LLVMInst urem
|
508
508
|
class URemInst < Instruction; end
|
509
|
-
|
509
|
+
|
510
510
|
# @LLVMInst xor
|
511
511
|
class XOrInst < Instruction; end
|
512
|
-
|
512
|
+
|
513
513
|
# @LLVMInst zext
|
514
514
|
class ZeroExtendInst < Instruction; end
|
515
|
-
|
515
|
+
|
516
516
|
# @LLVMInst zext
|
517
517
|
# @LLVMInst bitcast
|
518
518
|
class ZeroExtendOrBitCastInst < Instruction; end
|