Class: Carbon::Tacky::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/carbon/tacky/builder.rb

Overview

A "builder." This is used in order to create an instruction set for a block. The builder defines a set of methods that create and append an instruction to the parent block. Each instruction gets its own instruction ID relative to the parent block.

Instance Method Summary collapse

Constructor Details

#initialize(block) ⇒ Builder

Initialize the builder with the given block.

Parameters:



18
19
20
# File 'lib/carbon/tacky/builder.rb', line 18

def initialize(block)
  @block = block
end

Instance Method Details

#_call(inst, *parameters, name: "") ⇒ Tacky::Reference

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Creates an instruction, and returns a reference to that instruction. The reference points to the instruction using the "instruction id," which is essentially the instruction's place in the block.

Parameters:

  • inst (::Symbol, ::String)

    The instruction name.

  • parameters (<Reference, Parameter, Value, Object>)

    The parameters that are being passed to the instruction.

  • name (::String) (defaults to: "")

    The return value name of the instruction.

Returns:



306
307
308
309
310
311
312
313
314
315
316
# File 'lib/carbon/tacky/builder.rb', line 306

def _call(inst, *parameters, name: "")
  # cut it off at the pass and force all parameters to instructions to
  # have a type.
  id = @block.next
  typed = parameters.map { |p| Tacky::Typed.from(p) }
  reference = Tacky::Reference.new(id)
  instruction = Tacky::Instruction.new(id, inst, parameters, reference)
  instruction.name = name
  @block.instructions << instruction
  reference
end

#add(left, right, name = "") ⇒ Tacky::Reference

Creates an add instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#aggregate_ret(*values) ⇒ Tacky::Reference

Creates a ret instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#alloca(type, name = "") ⇒ Tacky::Reference

Creates an alloca instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#and(left, right, name = "") ⇒ Tacky::Reference

Creates an and instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#array_alloca(type, size, name = "") ⇒ Tacky::Reference

Creates an array_alloca instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#ashr(left, right, name = "") ⇒ Tacky::Reference

Creates an ashr instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#bit_cast(value, type, name = "") ⇒ Tacky::Reference

Creates a bitcast instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#br(destination) ⇒ Tacky::Reference

Creates a br instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#call(function, *arguments) ⇒ Tacky::Reference

Creates a call instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#cond(iftrue, iffalse) ⇒ Tacky::Reference

Creates a br instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#deref(type) ⇒ Object



291
292
293
294
# File 'lib/carbon/tacky/builder.rb', line 291

def deref(type)
  fail
  _call(:_deref, type)
end

#exact_sdiv(left, right, name = "") ⇒ Tacky::Reference

Creates an sdiv instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#extract_element(vector, index, name = "") ⇒ Tacky::Reference

Creates an extract_element instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#extract_value(aggregate, index, name = "") ⇒ Tacky::Reference

Creates an extract_value instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fadd(left, right, name = "") ⇒ Tacky::Reference

Creates an fadd instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fcmp(pred, left, right, name = "") ⇒ Tacky::Reference

Creates an fcmp instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fdiv(left, right, name = "") ⇒ Tacky::Reference

Creates an fdiv instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fmul(left, right, name = "") ⇒ Tacky::Reference

Creates an fmul instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fp2si(value, type, name = "") ⇒ Tacky::Reference

Creates a fptosi instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fp2ui(value, type, name = "") ⇒ Tacky::Reference

Creates a fptoui instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fp_cast(value, type, name = "") ⇒ Tacky::Reference

Creates a bitcast instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fp_ext(value, type, name = "") ⇒ Tacky::Reference

Creates a fpext instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fp_trunc(value, type, name = "") ⇒ Tacky::Reference

Creates a fptrunc instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#free(pointer) ⇒ Tacky::Reference

Creates a free instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#frem(left, right, name = "") ⇒ Tacky::Reference

Creates a frem instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#fsub(left, right, name = "") ⇒ Tacky::Reference

Creates a fsub instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#gep(value, indices, name = "") ⇒ Tacky::Reference

Creates a gep instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#global_string(string, name = "") ⇒ Tacky::Reference

Creates a global_string instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#global_string_pointer(string, name = "") ⇒ Tacky::Reference

Creates a global_string_pointer instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#ibr(addr, destinations) ⇒ Tacky::Reference

Creates a ibr instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#icmp(pred, left, right, name = "") ⇒ Tacky::Reference

Creates an icmp instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#inbounds_gep(value, indices, name = "") ⇒ Tacky::Reference

Creates an gep instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#insert_element(vector, value, index, name = "") ⇒ Tacky::Reference

Creates an insert_element instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#insert_value(aggregate, value, index, name = "") ⇒ Tacky::Reference

Creates an insert_value instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#int2ptr(value, type, name = "") ⇒ Tacky::Reference

Creates an inttoptr instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#int_cast(value, type, name = "") ⇒ Tacky::Reference

Creates an bitcast instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#invoke(function, params, normal, exception, name = "") ⇒ Tacky::Reference

Creates an invoke instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#is_not_null(value, name = "") ⇒ Tacky::Reference

Creates an is_not_null instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#is_null(value, name = "") ⇒ Tacky::Reference

Creates an is_null instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#load(pointer, name = "") ⇒ Tacky::Reference

Creates a load instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#lshr(left, right, name = "") ⇒ Tacky::Reference

Creates a lshr instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#malloc(type, name = "") ⇒ Tacky::Reference

Creates a malloc instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#mul(left, right, name = "") ⇒ Tacky::Reference

Creates a mul instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#neg(value, name = "") ⇒ Tacky::Reference

Creates a sub instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#not(value, name = "") ⇒ Tacky::Reference

Creates a not instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#nsw_add(left, right, name = "") ⇒ Tacky::Reference

Creates an add instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#nsw_mul(left, right, name = "") ⇒ Tacky::Reference

Creates a mul instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#nsw_neg(left, right, name = "") ⇒ Tacky::Reference

Creates a sub instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#nsw_sub(left, right, name = "") ⇒ Tacky::Reference

Creates a sub instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#null(type) ⇒ Tacky::Reference

Returns a null value of a given type. This may be a constant value or a generated value.

Parameters:

Returns:

  • (Tacky::Reference)

    A value representing the return value of the instruction.



287
288
289
# File 'lib/carbon/tacky/builder.rb', line 287

def null(type)
  _call(:_null, type)
end

#nuw_add(left, right, name = "") ⇒ Tacky::Reference

Creates an add instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#nuw_mul(left, right, name = "") ⇒ Tacky::Reference

Creates a mul instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#nuw_neg(left, right, name = "") ⇒ Tacky::Reference

Creates a sub instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#nuw_sub(left, right, name = "") ⇒ Tacky::Reference

Creates a sub instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#or(left, right, name = "") ⇒ Tacky::Reference

Creates an or instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#phi(type, incoming, name = "") ⇒ Tacky::Reference

Creates a phi instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#pointer_cast(value, type, name = "") ⇒ Tacky::Reference

Creates a bitcast instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#ptr2int(value, type, name = "") ⇒ Tacky::Reference

Creates a ptrtoint instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#ptr_diff(left, right, name = "") ⇒ Tacky::Reference

Creates a ptr_diff instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#ret(value) ⇒ Tacky::Reference

Creates a ret instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#ret_void(value) ⇒ Tacky::Reference

Creates a ret instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#sdiv(left, right, name = "") ⇒ Tacky::Reference

Creates an sdiv instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#select(check, vtrue, vfalse, name = "") ⇒ Tacky::Reference

Creates a select instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#sext(value, type, name = "") ⇒ Tacky::Reference

Creates a sext instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#sext_or_bit_cast(value, type, name = "") ⇒ Tacky::Reference

Creates a sext or bitcast instruction, depending on the value and type.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#shl(left, right, name = "") ⇒ Tacky::Reference

Creates a shl instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#shuffle_vector(vec1, vec2, mask, name = "") ⇒ Tacky::Reference

Creates a shuffle_vector instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#si2fp(value, type, name = "") ⇒ Tacky::Reference

Creates a sitofp instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#sizeof(type) ⇒ Tacky::Reference

Returns the size of a type. This may be a constant value or a generated value.

Parameters:

Returns:

  • (Tacky::Reference)

    A value representing the return value of the instruction.



277
278
279
# File 'lib/carbon/tacky/builder.rb', line 277

def sizeof(type)
  _call(:_sizeof, type)
end

#srem(left, right, name = "") ⇒ Tacky::Reference

Creates a srem instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#store(pointer, value) ⇒ Tacky::Reference

Creates a store instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#struct_gep(value, index, name = "") ⇒ Tacky::Reference

Creates a gep instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#sub(left, right, name = "") ⇒ Tacky::Reference

Creates a sub instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#switch(value, default, cases) ⇒ Tacky::Reference

Creates a switch instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#trunc(value, type, name = "") ⇒ Tacky::Reference

Creates a trunc instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#trunc_or_bit_cast(value, type, name = "") ⇒ Tacky::Reference

Creates a trunc or bitcast instruction based on the value and type.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#udiv(left, right, name = "") ⇒ Tacky::Reference

Creates a udiv instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#ui2fp(value, type, name = "") ⇒ Tacky::Reference

Creates a uitofp instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#unreachableTacky::Reference

Creates an unreachable instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#unwindTacky::Reference

Creates an unwind instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#urem(left, right, name = "") ⇒ Tacky::Reference

Creates a urem instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#zext(value, type, name = "") ⇒ Tacky::Reference

Creates a zext instruction.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }

#zext_or_bit_cast(value, type, name = "") ⇒ Tacky::Reference

Creates a zext or bitcast instruction based on the value and type.

Returns:



269
# File 'lib/carbon/tacky/builder.rb', line 269

methods.each { |m| define_method(m) { |*a| _call(m, *a) } }