ScEpTIC.AST.elements package¶
Subpackages¶
- ScEpTIC.AST.elements.instructions package
- Submodules
 - ScEpTIC.AST.elements.instructions.binary_operation module
 - ScEpTIC.AST.elements.instructions.conversion module
 - ScEpTIC.AST.elements.instructions.memory_operations module
 - ScEpTIC.AST.elements.instructions.other_operations module
 - ScEpTIC.AST.elements.instructions.termination_instructions module
 - Module contents
 
 
Submodules¶
ScEpTIC.AST.elements.function module¶
- 
class 
ScEpTIC.AST.elements.function.Function(name, return_type, arguments, attr_groups, metadata)¶ Bases:
objectAST node representing a function. Contains the function’s definition and body.
- 
adjust_alloca_ticks()¶ This method sets all the ticks for alloca operations equal to 0, except for the last one. Alloca operations are merged together during datalayout into a single ebp increment. The last alloca is the one with tick = 1 for skipping the entire alloca section when running in intermittent execution (otherwise multiple alloca operations might be run, but the result would be wrong)
- 
attach_body(body)¶ Sets the body of a function definition and creates the mapping between instruction id and labels.
- 
declarations= {}¶ 
- 
elements= {}¶ 
- 
property 
first_basic_block_id¶ Returns the id of the first basic block. If the function has some arguments, each argument is mapped starting from %0 to %(#args - 1) The first basic block label will be %(#args)
- 
get_ignore()¶ Returns a list of register names to be ignored by register allocation. For a function corresponds to the registers used to pass the parameters, which are from %0 to %(n-1) (n = number of arguments).
- 
get_instruction_id(label)¶ Returns the instruction which has a given label.
- 
update_body(new_body)¶ Updates the body of the function
- 
update_labels()¶ Updates the label-instruction mappings
- 
 
ScEpTIC.AST.elements.global_var module¶
ScEpTIC.AST.elements.instruction module¶
- 
class 
ScEpTIC.AST.elements.instruction.Instruction¶ Bases:
objectGeneric AST Instruction
- 
get_defs()¶ Returns a list of registers defined by this instruction. Usually its len will be 1 or 0. (used by register allocation)
- 
get_ignore()¶ Returns a list of register names to be ignored by register allocation.
- 
get_input_lookup()¶ Returns the input lookup data for the current operation
- 
get_uses()¶ Returns a list containing the names of the registers used by this instruction. (used by register allocation)
- 
property 
instruction_type¶ Returns the instruction type
- 
memory_tick_count= 0¶ 
- 
replace_reg_name(old_reg_name, new_reg_name)¶ Skeleton. Replaces the name of a register used by the instruction with a new one. (used by register allocation)
- 
resolve_memory_address_chain(elements)¶ Returns a list of all the instructions required to get the address of the targeted element(s)
- 
resolve_memory_tag(elements)¶ Resolves and returns the memory tag of the targeted element
- 
run()¶ Executes the operation and the target assignment.
- 
save_in_target_register(value)¶ Saves a given value in the target register of the instruction, if present.
- 
tick_count= 1¶ 
- 
 
ScEpTIC.AST.elements.metadata module¶
- 
class 
ScEpTIC.AST.elements.metadata.Metadata(name, metadata_type, metadata_function_name, values, includes)¶ Bases:
objectAST node for LLVM metadata
- 
elements= {}¶ 
- 
static 
fancy_format(metadata)¶ Formats the metadata and returns it
- 
retrieve()¶ Resolve metadata tree and return only relevant metadata information
- 
 
ScEpTIC.AST.elements.types module¶
- 
class 
ScEpTIC.AST.elements.types.BaseType(base_type, bits)¶ Bases:
objectAST node of LLVM Base Type NOTE: enum data type doesn’t appear because it is directly resolved and converted in int by the llvm front-end.
- 
class 
ScEpTIC.AST.elements.types.CustomType(fullname, ct_type, name, type_composition)¶ Bases:
objectAST node representing a LLVM custom type
- 
elements= {}¶ 
- 
get_memory_composition()¶ Returns a list of lists, in which each element is a memory composition of the represented type.
- 
 
- 
class 
ScEpTIC.AST.elements.types.Type(is_pointer, pointer_level, is_array, array_composition, is_vector, vector_dimension, is_base_type, custom_type_name, is_ct_defined, custom_type_def, base_type)¶ Bases:
objectAST node representing a LLVM generic type (Array, Vector, Pointer, Custom Type)
- 
address_dimension= 0¶ 
- 
classmethod 
empty()¶ Creates an empty type.
- 
static 
flat_composition(composition, lst)¶ flatterns a memory composition, turning it into a single list of dimensions array: [2, 32] -> [32, 32] array of struct: [3, [[3, 8], [1, 32]]] -> [8, 8, 8, 32, 8, 8, 8, 32, 8, 8, 8, 32]
- 
get_memory_composition(flat_composition=False)¶ Returns the memory composition of the Type, which is a list [a, b] with a representing the number of elements and b representing the size of each element. b can be a list of memory composition in case the Type refers to a customtype.
- 
 
ScEpTIC.AST.elements.value module¶
- 
class 
ScEpTIC.AST.elements.value.Value(value_class, operand_value, value_type)¶ Bases:
objectAST node for data representation (immediate, register data, etc)
- 
static 
convert_bin_to_sint(val)¶ Converts a number in binary format to its equivalent signed decimal.
- 
static 
convert_bin_to_uint(val)¶ Converts a number in binary format to its equivalent unsigned decimal.
- 
static 
convert_sint_to_bin(val, bits)¶ Converts a signed integer to its binary representation, using a certain number of bits
- 
static 
convert_sint_to_sint(val, bits)¶ Convert a signed integer to a signed integer, using a maximum number of bits.
- 
static 
convert_sint_to_uint(val, bits)¶ Converts a number in signed integer form to its equivalent unsigned integer.
- 
static 
convert_uint_to_bin(val, bits)¶ Converts an unsigned integer to its binary representation. For how data is represented, it is the same as converting a signed integer to binary.
- 
static 
convert_uint_to_sint(val, bits)¶ Converts a number in unsigned integer form to its equivalent signed integer.
- 
get_defs()¶ Returns a list of registers defined by this instruction. (used by register allocation)
- 
get_input_lookup()¶ Returns the input lookup information for the current Value object.
- 
get_uses()¶ Returns a list containing the names of the registers used by this value. (used by register allocation)
- 
get_val()¶ Retrieve and returns the value represented by the object.
- 
replace_reg_name(old_reg_name, new_reg_name)¶ Replaces the name of a register contained in this Value object. (used by register allocation)
- 
resolve_memory_address_chain(elements)¶ Returns a list of all the instructions required to get the address of the targeted element(s)
- 
resolve_memory_tag(elements)¶ Resolves and returns the memory tag of the targeted element
- 
resolve_memory_tag_dependency(elements)¶ 
- 
static