ruby-llvm 2.9.0 → 2.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,7 +1,7 @@
1
1
  = LLVM
2
2
 
3
3
  Author:: Jeremy Voorhis
4
- Contributors:: Evan Phoenix, Takanori Ishikawa, Ronaldo M. Ferraz
4
+ Contributors:: Evan Phoenix, David Holroyd, Takanori Ishikawa, Ronaldo M. Ferraz, Mac Malone
5
5
  Copyright:: Copyright (c) 2010-2011 Jeremy Voorhis
6
6
  License:: BSD 3-clause (see LICENSE)
7
7
 
@@ -10,18 +10,17 @@ make use of LLVM's optimization passes and JIT compilation for
10
10
  implementing compiled DSLs, callback functions, or fast Ruby method
11
11
  implementations.
12
12
 
13
-
14
-
15
13
  ruby-llvm has been tested on Mac OS X 10.6 using the following Ruby interpreters:
16
14
 
17
15
  * MRI 1.8.7-p174
18
16
  * MRI 1.9.2-p180
19
17
  * JRuby 1.4.0
20
18
 
21
- If using MRI, ffi >= 1.0.7 is recommended.
19
+ If using MRI, ffi >= 1.0.7 is recommended (only ffi >= 1.0.0 is required).
22
20
 
23
21
  == Requirements
24
- * LLVM 2.9, including libLLVM-2.9 (compile LLVM with --enable-shared)
22
+ * LLVM 2.9, including libLLVM-2.9 (compile LLVM with --enable-shared).
23
+ * In order to ensure the usability of JIT features (i.e. create_jit_compiler), compile LLVM with --enable-jit as well.
25
24
 
26
25
  == About version numbers
27
26
 
data/lib/llvm.rb CHANGED
@@ -2,6 +2,7 @@ require 'rubygems'
2
2
  require 'ffi'
3
3
 
4
4
  module LLVM
5
+ # @private
5
6
  module C
6
7
  extend ::FFI::Library
7
8
 
data/lib/llvm/analysis.rb CHANGED
@@ -3,6 +3,7 @@ require 'llvm/core'
3
3
  require 'llvm/target'
4
4
 
5
5
  module LLVM
6
+ # @private
6
7
  module C
7
8
  enum :verifier_failure_action, [
8
9
  :abort_process,
data/lib/llvm/core.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'llvm'
2
2
 
3
3
  module LLVM
4
+ # @private
4
5
  module C
5
6
  enum :attribute, [
6
7
  :ext, 1 << 0,
@@ -2,50 +2,60 @@ module LLVM
2
2
  class Builder
3
3
  private_class_method :new
4
4
 
5
- def initialize(ptr) # :nodoc:
5
+ # @private
6
+ def initialize(ptr)
6
7
  @ptr = ptr
7
8
  end
8
9
 
9
- def to_ptr # :nodoc:
10
+ # @private
11
+ def to_ptr
10
12
  @ptr
11
13
  end
12
14
 
15
+ # Creates a Builder.
13
16
  def self.create
14
17
  new(C.LLVMCreateBuilder())
15
18
  end
16
19
 
20
+ # Positions the builder at the given Instruction in the given BasicBlock.
17
21
  def position(block, instruction)
18
- raise "block must not be nil" if block.nil?
22
+ raise "Block must not be nil" if block.nil?
19
23
  C.LLVMPositionBuilder(self, block, instruction)
20
24
  self
21
25
  end
22
26
 
27
+ # Positions the builder before the given Instruction.
23
28
  def position_before(instruction)
24
- raise "instruction must not be nil" if instruction.nil?
29
+ raise "Instruction must not be nil" if instruction.nil?
25
30
  C.LLVMPositionBuilderBefore(self, instruction)
26
31
  self
27
32
  end
28
33
 
34
+ # Positions the builder at the end of the given BasicBlock.
29
35
  def position_at_end(block)
30
- raise "block must not be nil" if block.nil?
36
+ raise "Block must not be nil" if block.nil?
31
37
  C.LLVMPositionBuilderAtEnd(self, block)
32
38
  self
33
39
  end
34
40
 
35
- def get_insert_block
41
+ # The BasicBlock at which the Builder is currently positioned.
42
+ def insert_block
36
43
  BasicBlock.from_ptr(C.LLVMGetInsertBlock(self))
37
44
  end
38
45
 
39
- # Terminators
40
46
 
47
+ # @LLVMinst ret
41
48
  def ret_void
42
49
  Instruction.from_ptr(C.LLVMBuildRetVoid(self))
43
50
  end
44
51
 
52
+ # @LLVMinst ret
45
53
  def ret(val)
46
54
  Instruction.from_ptr(C.LLVMBuildRet(self, val))
47
55
  end
48
56
 
57
+ # Builds a ret instruction returning multiple values.
58
+ # @LLVMinst ret
49
59
  def aggregate_ret(*vals)
50
60
  FFI::MemoryPointer.new(FFI.type_size(:pointer) * vals.size) do |vals_ptr|
51
61
  vals_ptr.write_array_of_pointer(vals)
@@ -53,154 +63,206 @@ module LLVM
53
63
  end
54
64
  end
55
65
 
66
+ # Unconditional branching (i.e. goto)
67
+ # @LLVMinst br
56
68
  def br(block)
57
69
  Instruction.from_ptr(
58
70
  C.LLVMBuildBr(self, block))
59
71
  end
60
72
 
73
+ # Conditional branching (i.e. if)
74
+ # @LLVMinst br
61
75
  def cond(cond, iftrue, iffalse)
62
76
  Instruction.from_ptr(
63
77
  C.LLVMBuildCondBr(self, cond, iftrue, iffalse))
64
78
  end
65
79
 
66
- def switch(val, block, ncases)
67
- SwitchInst.from_ptr(C.LLVMBuildSwitch(self, val, block, ncases))
80
+ # @LLVMinst switch
81
+ def switch(val, default, ncases)
82
+ SwitchInst.from_ptr(C.LLVMBuildSwitch(self, val, default, ncases))
68
83
  end
69
84
 
85
+ # Invoke a function which may potentially unwind
86
+ # @LLVMinst invoke
70
87
  def invoke(fun, args, _then, _catch, name = "")
71
88
  Instruction.from_ptr(
72
89
  C.LLVMBuildInvoke(self,
73
90
  fun, args, args.size, _then, _catch, name))
74
91
  end
75
92
 
93
+ # Builds an unwind Instruction.
94
+ # @LLVMinst unwind
76
95
  def unwind
77
96
  Instruction.from_ptr(C.LLVMBuildUnwind(self))
78
97
  end
79
98
 
99
+ # @LLVMinst unreachable
80
100
  def unreachable
81
101
  Instruction.from_ptr(C.LLVMBuildUnreachable(self))
82
102
  end
83
103
 
84
- # Arithmetic
85
-
104
+ # @LLVMinst add
86
105
  def add(lhs, rhs, name = "")
87
106
  Instruction.from_ptr(C.LLVMBuildAdd(self, lhs, rhs, name))
88
107
  end
89
108
 
109
+ # No signed wrap addition.
110
+ # @LLVMinst add
90
111
  def nsw_add(lhs, rhs, name = "")
91
112
  Instruction.from_ptr(C.LLVMBuildNSWAdd(self, lhs, rhs, name))
92
113
  end
93
114
 
115
+ # @LLVMinst fadd
94
116
  def fadd(lhs, rhs, name = "")
95
117
  Instruction.from_ptr(C.LLVMBuildFAdd(self, lhs, rhs, name))
96
118
  end
97
119
 
120
+ # @LLVMinst sub
98
121
  def sub(lhs, rhs, name = "")
99
122
  Instruction.from_ptr(C.LLVMBuildSub(self, lhs, rhs, name))
100
123
  end
101
124
 
125
+ # @LLVMinst fsub
102
126
  def fsub(lhs, rhs, name = "")
103
127
  Instruction.from_ptr(C.LLVMBuildFSub(self, lhs, rhs, name))
104
128
  end
105
129
 
130
+ # @LLVMinst mul
106
131
  def mul(lhs, rhs, name = "")
107
132
  Instruction.from_ptr(C.LLVMBuildMul(self, lhs, rhs, name))
108
133
  end
109
134
 
135
+ # @LLVMinst fmul
110
136
  def fmul(lhs, rhs, name = "")
111
137
  Instruction.from_ptr(C.LLVMBuildFMul(self, lhs, rhs, name))
112
138
  end
113
139
 
140
+ # Unsigned integer division
141
+ # @LLVMinst udiv
114
142
  def udiv(lhs, rhs, name = "")
115
143
  Instruction.from_ptr(C.LLVMBuildUDiv(self, lhs, rhs, name))
116
144
  end
117
145
 
146
+ # Signed division
147
+ # @LLVMinst sdiv
118
148
  def sdiv(lhs, rhs, name = "")
119
149
  Instruction.from_ptr(C.LLVMBuildSDiv(self, lhs, rhs, name))
120
150
  end
121
151
 
152
+ # Signed exact division
153
+ # @LLVMinst sdiv
122
154
  def exact_sdiv(lhs, rhs, name = "")
123
155
  Instruction.from_ptr(C.LLVMBuildExactSDiv(self, lhs, rhs, name))
124
156
  end
125
157
 
158
+ # @LLVMinst fdiv
126
159
  def fdiv(lhs, rhs, name = "")
127
160
  Instruction.from_ptr(C.LLVMBuildFDiv(self, lhs, rhs, name))
128
161
  end
129
162
 
163
+ # @LLVMinst urem
130
164
  def urem(lhs, rhs, name = "")
131
165
  Instruction.from_ptr(C.LLVMBuildURem(self, lhs, rhs, name))
132
166
  end
133
167
 
168
+ # @LLVMinst srem
134
169
  def srem(lhs, rhs, name = "")
135
170
  Instruction.from_ptr(C.LLVMBuildSRem(self, lhs, rhs, name))
136
171
  end
137
172
 
173
+ # @LLVMinst frem
138
174
  def frem(lhs, rhs, name = "")
139
175
  Instruction.from_ptr(C.LLVMBuildFRem(self, lhs, rhs, name))
140
176
  end
141
177
 
178
+ # @LLVMinst shl
142
179
  def shl(lhs, rhs, name = "")
143
180
  Instruction.from_ptr(C.LLVMBuildShl(self, lhs, rhs, name))
144
181
  end
145
182
 
183
+ # Shifts right with zero fill.
184
+ # @LLVMinst lshr
146
185
  def lshr(lhs, rhs, name = "")
147
186
  Instruction.from_ptr(C.LLVMBuildLShr(self, lhs, rhs, name))
148
187
  end
149
188
 
189
+ # Arithmatic shift right.
190
+ # @LLVMinst ashr
150
191
  def ashr(lhs, rhs, name = "")
151
192
  Instruction.from_ptr(C.LLVMBuildAShr(self, lhs, rhs, name))
152
193
  end
153
194
 
195
+ # @LLVMinst and
154
196
  def and(lhs, rhs, name = "")
155
197
  Instruction.from_ptr(C.LLVMBuildAnd(self, lhs, rhs, name))
156
198
  end
157
199
 
200
+ # @LLVMinst or
158
201
  def or(lhs, rhs, name = "")
159
202
  Instruction.from_ptr(C.LLVMBuildOr(self, lhs, rhs, name))
160
203
  end
161
204
 
205
+ # @LLVMinst xor
162
206
  def xor(lhs, rhs, name = "")
163
207
  Instruction.from_ptr(C.LLVMBuildXor(self, lhs, rhs, name))
164
208
  end
165
209
 
210
+ # Integer negation (i.e. multiplication by -1).
166
211
  def neg(arg, name = "")
167
212
  Instruction.from_ptr(C.LLVMBuildNeg(self, arg, name))
168
213
  end
169
214
 
215
+ # Boolean negation.
170
216
  def not(arg, name = "")
171
217
  Instruction.from_ptr(C.LLVMBuildNot(self, arg, name))
172
218
  end
173
219
 
174
- # Memory
175
-
220
+ # Builds a malloc Instruction for the given type.
176
221
  def malloc(ty, name = "")
177
222
  Instruction.from_ptr(C.LLVMBuildMalloc(self, LLVM::Type(ty), name))
178
223
  end
179
224
 
225
+ # Builds a malloc Instruction for the given array type.
180
226
  def array_malloc(ty, val, name = "")
181
227
  Instruction.from_ptr(C.LLVMBuildArrayMalloc(self, LLVM::Type(ty), val, name))
182
228
  end
183
229
 
230
+ # Stack allocation.
231
+ # @LLVMinst alloca
184
232
  def alloca(ty, name = "")
185
233
  Instruction.from_ptr(C.LLVMBuildAlloca(self, LLVM::Type(ty), name))
186
234
  end
187
235
 
236
+ # Array stack allocation
237
+ # @param LLVM::Value used to initialize each element.
238
+ # @LLVMinst alloca
188
239
  def array_alloca(ty, val, name = "")
189
240
  Instruction.from_ptr(C.LLVMBuildArrayAlloca(self, LLVM::Type(ty), val, name))
190
241
  end
191
242
 
243
+ # Builds a free Instruction. Frees the given pointer (an Instruction).
192
244
  def free(pointer)
193
245
  Instruction.from_ptr(C.LLVMBuildFree(self, pointer))
194
246
  end
195
247
 
248
+ # Builds a load Instruction with the given name. Loads the value of the
249
+ # given pointer (an Instruction).
250
+ # @LLVMinst load
196
251
  def load(pointer, name = "")
197
252
  Instruction.from_ptr(C.LLVMBuildLoad(self, pointer, name))
198
253
  end
199
254
 
255
+ # Builds a store Instruction. Stores the given Value into the given
256
+ # pointer (an Instruction).
257
+ # @LLVMinst store
200
258
  def store(val, pointer)
201
259
  Instruction.from_ptr(C.LLVMBuildStore(self, val, pointer))
202
260
  end
203
261
 
262
+ # Builds a getelementptr Instruction with the given name. Retrieves the
263
+ # element pointer at the given indices of the pointer (an Instruction).
264
+ # @LLVMinst gep
265
+ # @see http://llvm.org/docs/GetElementPtr.html
204
266
  def gep(pointer, indices, name = "")
205
267
  indices = Array(indices)
206
268
  FFI::MemoryPointer.new(FFI.type_size(:pointer) * indices.size) do |indices_ptr|
@@ -210,6 +272,12 @@ module LLVM
210
272
  end
211
273
  end
212
274
 
275
+ # Builds a inbounds getelementptr Instruction with the given name.
276
+ # Retrieves the element pointer at the given indices of the pointer (an
277
+ # Instruction). If the indices are outside the allocated pointer the
278
+ # retrieved value is undefined.
279
+ # @LLVMinst gep
280
+ # @see http://llvm.org/docs/GetElementPtr.html
213
281
  def inbounds_gep(pointer, indices, name = "")
214
282
  indices = Array(indices)
215
283
  FFI::MemoryPointer.new(FFI.type_size(:pointer) * indices.size) do |indices_ptr|
@@ -219,104 +287,164 @@ module LLVM
219
287
  end
220
288
  end
221
289
 
290
+ # Builds a struct getelementptr Instruction with the given name.
291
+ # Retrieves the element pointer at the given indices (idx) of the pointer
292
+ # (an Instruction). See http://llvm.org/docs/GetElementPtr.html for
293
+ # discussion.
294
+ # @LLVMinst gep
295
+ # @see http://llvm.org/docs/GetElementPtr.html
222
296
  def struct_gep(pointer, idx, name = "")
223
297
  Instruction.from_ptr(C.LLVMBuildStructGEP(self, pointer, idx, name))
224
298
  end
225
299
 
300
+ # Builds a global string Instruction with the given name. Creates a global
301
+ # string.
226
302
  def global_string(string, name = "")
227
303
  Instruction.from_ptr(C.LLVMBuildGlobalString(self, string, name))
228
304
  end
229
305
 
306
+ # Builds a global string Instruction with the given name. Creates a global
307
+ # string pointer.
230
308
  def global_string_pointer(string, name = "")
231
309
  Instruction.from_ptr(C.LLVMBuildGlobalStringPtr(self, string, name))
232
310
  end
233
311
 
234
- # Casts
235
-
312
+ # @LLVMinst trunc
236
313
  def trunc(val, ty, name = "")
237
314
  Instruction.from_ptr(C.LLVMBuildTrunc(self, val, LLVM::Type(ty), name))
238
315
  end
239
316
 
317
+ # @LLVMinst zext
240
318
  def zext(val, ty, name = "")
241
319
  Instruction.from_ptr(C.LLVMBuildZExt(self, val, LLVM::Type(ty), name))
242
320
  end
243
321
 
322
+ # @LLVMinst sext
244
323
  def sext(val, ty, name = "")
245
324
  Instruction.from_ptr(C.LLVMBuildSExt(self, val, LLVM::Type(ty), name))
246
325
  end
247
326
 
327
+ # @LLVMinst fptoui
248
328
  def fp2ui(val, ty, name = "")
249
329
  Instruction.from_ptr(C.LLVMBuildFPToUI(self, val, LLVM::Type(ty), name))
250
330
  end
251
331
 
332
+ # @LLVMinst fptosi
252
333
  def fp2si(val, ty, name = "")
253
334
  Instruction.from_ptr(C.LLVMBuildFPToSI(self, val, LLVM::Type(ty), name))
254
335
  end
255
336
 
337
+ # @LLVMinst uitofp
256
338
  def ui2fp(val, ty, name = "")
257
339
  Instruction.from_ptr(C.LLVMBuildUIToFP(self, val, LLVM::Type(ty), name))
258
340
  end
259
341
 
342
+ # @LLVMinst sitofp
260
343
  def si2fp(val, ty, name = "")
261
344
  Instruction.from_ptr(C.LLVMBuildSIToFP(self, val, LLVM::Type(ty), name))
262
345
  end
263
346
 
347
+ # @LLVMinst fptrunc
264
348
  def fp_trunc(val, ty, name = "")
265
349
  Instruction.from_ptr(C.LLVMBuildFPTrunc(self, val, LLVM::Type(ty), name))
266
350
  end
267
351
 
352
+ # @LLVMinst fpext
268
353
  def fp_ext(val, ty, name = "")
269
354
  Instruction.from_ptr(C.LLVMBuildFPExt(self, val, LLVM::Type(ty), name))
270
355
  end
271
356
 
357
+ # Cast a pointer to an int. Useful for pointer arithmetic.
358
+ # @LLVMinst ptrtoint
272
359
  def ptr2int(val, ty, name = "")
273
360
  Instruction.from_ptr(C.LLVMBuildPtrToInt(self, val, LLVM::Type(ty), name))
274
361
  end
275
362
 
363
+ # @LLVMinst inttoptr
276
364
  def int2ptr(val, ty, name = "")
277
365
  Instruction.from_ptr(C.LLVMBuildIntToPtr(self, val, LLVM::Type(ty), name))
278
366
  end
279
367
 
368
+ # @LLVMinst bitcast
280
369
  def bit_cast(val, ty, name = "")
281
370
  Instruction.from_ptr(C.LLVMBuildBitCast(self, val, LLVM::Type(ty), name))
282
371
  end
283
372
 
373
+ # @LLVMinst zext
374
+ # @LLVMinst bitcast
284
375
  def zext_or_bit_cast(val, ty, name = "")
285
376
  Instruction.from_ptr(C.LLVMBuildZExtOrBitCast(self, val, LLVM::Type(ty), name))
286
377
  end
287
378
 
379
+ # @LLVMinst sext
380
+ # @LLVMinst bitcast
288
381
  def sext_or_bit_cast(val, ty, name = "")
289
382
  Instruction.from_ptr(C.LLVMBuildSExtOrBitCast(self, val, LLVM::Type(ty), name))
290
383
  end
291
384
 
385
+ # @LLVMinst trunc
386
+ # @LLVMinst bitcast
292
387
  def trunc_or_bit_cast(val, ty, name = "")
293
388
  Instruction.from_ptr(C.LLVMBuildTruncOrBitCast(self, val, LLVM::Type(ty), name))
294
389
  end
295
390
 
391
+ # Builds a pointer cast Instruction with the given name.
296
392
  def pointer_cast(val, ty, name = "")
297
393
  Instruction.from_ptr(C.LLVMBuildPointerCast(self, val, LLVM::Type(ty), name))
298
394
  end
299
395
 
396
+ # Builds a int cast Instruction with the given name.
300
397
  def int_cast(val, ty, name = "")
301
398
  Instruction.from_ptr(C.LLVMBuildIntCast(self, val, LLVM::Type(ty), name))
302
399
  end
303
400
 
401
+ # Builds a fp cast Instruction with the given name.
304
402
  def fp_cast(val, ty, name = "")
305
403
  Instruction.from_ptr(C.LLVMBuildFPCast(self, val, LLVM::Type(ty), name))
306
404
  end
307
405
 
308
- # Comparisons
309
-
406
+ # Builds an icmp Instruction. Compares lhs to rhs (Instructions)
407
+ # using the given symbol predicate (pred):
408
+ # :eq - equal to
409
+ # :ne - not equal to
410
+ # :ugt - unsigned greater than
411
+ # :uge - unsigned greater than or equal to
412
+ # :ult - unsigned less than
413
+ # :ule - unsigned less than or equal to
414
+ # :sgt - signed greater than
415
+ # :sge - signed greater than or equal to
416
+ # :slt - signed less than
417
+ # :sle - signed less than or equal to
418
+ # @LLVMinst icmp
310
419
  def icmp(pred, lhs, rhs, name = "")
311
420
  Instruction.from_ptr(C.LLVMBuildICmp(self, pred, lhs, rhs, name))
312
421
  end
313
422
 
423
+ # Builds an fcmp Instruction. Compares lhs to rhs (Instructions) as Reals
424
+ # using the given symbol predicate (pred):
425
+ # :ord - ordered
426
+ # :uno - unordered: isnan(X) | isnan(Y)
427
+ # :oeq - ordered and equal to
428
+ # :oeq - unordered and equal to
429
+ # :one - ordered and not equal to
430
+ # :one - unordered and not equal to
431
+ # :ogt - ordered and greater than
432
+ # :uge - unordered and greater than or equal to
433
+ # :olt - ordered and less than
434
+ # :ule - unordered and less than or equal to
435
+ # :oge - ordered and greater than or equal to
436
+ # :sge - unordered and greater than or equal to
437
+ # :ole - ordered and less than or equal to
438
+ # :sle - unordered and less than or equal to
439
+ # :true - always true and folded
440
+ # :false - always false and folded
441
+ # @LLVMinst fcmp
314
442
  def fcmp(pred, lhs, rhs, name = "")
315
443
  Instruction.from_ptr(C.LLVMBuildFCmp(self, pred, lhs, rhs, name))
316
444
  end
317
445
 
318
- # Misc
319
-
446
+ # Builds a Phi node of the given Type with the given incoming branches.
447
+ # @LLVMinst phi
320
448
  def phi(ty, *incoming)
321
449
  if incoming.last.kind_of? String
322
450
  name = incoming.pop
@@ -329,6 +457,9 @@ module LLVM
329
457
  phi
330
458
  end
331
459
 
460
+ # Builds a call Instruction. Calls the given Function with the given
461
+ # args (Instructions).
462
+ # @LLVMinst call
332
463
  def call(fun, *args)
333
464
  raise "No fun" if fun.nil?
334
465
  if args.last.kind_of? String
@@ -342,46 +473,57 @@ module LLVM
342
473
  CallInst.from_ptr(C.LLVMBuildCall(self, fun, args_ptr, args.size, name))
343
474
  end
344
475
 
476
+ # @LLVMinst select
345
477
  def select(_if, _then, _else, name = "")
346
478
  Instruction.from_ptr(C.LLVMBuildSelect(self, _if, _then, _else, name))
347
479
  end
348
480
 
481
+ # @LLVMinst va_arg
349
482
  def va_arg(list, ty, name = "")
350
483
  Instruction.from_ptr(C.LLVMBuildVAArg(self, list, LLVM::Type(ty), name))
351
484
  end
352
485
 
486
+ # @LLVMinst extractelement
353
487
  def extract_element(vector, index, name = "")
354
488
  Instruction.from_ptr(C.LLVMBuildExtractElement(self, vector, index, name))
355
489
  end
356
490
 
491
+ # @LLVMinst insertelement
357
492
  def insert_element(vector, elem, index, name = "")
358
493
  Instruction.from_ptr(C.LLVMBuildInsertElement(self, vector, elem, index, name))
359
494
  end
360
495
 
496
+ # @LLVMinst shufflevector
361
497
  def shuffle_vector(vec1, vec2, mask, name = "")
362
498
  Instruction.from_ptr(C.LLVMBuildShuffleVector(self, vec1, vec2, mask, name))
363
499
  end
364
500
 
501
+ # LLVMinst extractvalue
365
502
  def extract_value(aggregate, index, name = "")
366
503
  Instruction.from_ptr(C.LLVMBuildExtractValue(self, aggregate, index, name))
367
504
  end
368
505
 
506
+ # @LLVMinst insertvalue
369
507
  def insert_value(aggregate, elem, index, name = "")
370
508
  Instruction.from_ptr(C.LLVMBuildInsertValue(self, aggregate, elem, index, name))
371
509
  end
372
510
 
511
+ # Check if a value is null.
373
512
  def is_null(val, name = "")
374
513
  Instruction.from_ptr(C.LLVMBuildIsNull(self, val, name))
375
514
  end
376
515
 
516
+ # Check if a value is not null.
377
517
  def is_not_null(val, name = "")
378
518
  Instruction.from_ptr(C.LLVMBuildIsNotNull(self, val, name))
379
519
  end
380
520
 
521
+ # Retrieves the pointer difference between the given lhs and rhs.
381
522
  def ptr_diff(lhs, rhs, name = "")
382
523
  Instruction.from_ptr(C.LLVMBuildPtrDiff(lhs, rhs, name))
383
524
  end
384
525
 
526
+ # Disposes the builder.
385
527
  def dispose
386
528
  C.LLVMDisposeBuilder(@ptr)
387
529
  end