ScEpTIC.llvmir_parser.instructions_parser package¶
Submodules¶
ScEpTIC.llvmir_parser.instructions_parser.aggregate_operations module¶
-
ScEpTIC.llvmir_parser.instructions_parser.aggregate_operations.
is_aggregate_operation
(text)¶ Returns if a given instruction is an aggregate operation.
-
ScEpTIC.llvmir_parser.instructions_parser.aggregate_operations.
parse_aggregate_operation
(text)¶ Parses an aggregate operation. They are not available in C language, so are not supported for the simulation.
ScEpTIC.llvmir_parser.instructions_parser.binary_operations module¶
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
extract_type
(text, is_function_return_type=True, is_function_attr=True)¶ Returns the type and the offset of the type in a given string.
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
get_specific_attr_parser
(op_code)¶ Returns the optional parser for specific attributes.
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
is_binary_operation
(text)¶ Returns if a given instruction is a binary operation.
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
is_bitwise
(operation_code)¶ Returns if a given istruction is a bitwise binary operation.
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
parse_binary_operation
(text)¶ Parses and returns a binary operation.
- Binary Operations:
add
fadd
sub
fsub
mul
fmul
udiv
sdiv
fdiv
urem
srem
frem
- Bitwise Binary Operations:
shl
lsrh
asrh
and
or
xor
%target = <opcode> [optional_attributes] <type> <operand_1>, <operand_2>
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
parse_fp_specific_attr
(text, operation_code)¶ Parses and removes floating point “fast-math flags” specific attributes. It returns the list of found attributes.
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
parse_int_div_specific_attr
(text, operation_code)¶ Parses and removes integer_division specific attributes. It returns the list of found attributes.
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
parse_int_specific_attr
(text, operation_code)¶ Parses and removes integer specific attributes. It returns the list of found attributes.
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
parse_operand
(text, is_typed=False)¶ Parses an operand and returns a corresponding dict with keys {‘type’, ‘value’, ‘vector_type’}
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
parse_result_target
(text)¶ Returns the target virtual register of the result and the offset of the text.
-
ScEpTIC.llvmir_parser.instructions_parser.binary_operations.
parse_type_and_operands
(text)¶ Parses type and operands of a binary operation. It returns a dict with keys {‘op1’, ‘op2’}
ScEpTIC.llvmir_parser.instructions_parser.conversion_operations module¶
-
ScEpTIC.llvmir_parser.instructions_parser.conversion_operations.
is_conversion_operation
(text, has_target=True)¶ Return if an instruction is a conversion operation.
-
ScEpTIC.llvmir_parser.instructions_parser.conversion_operations.
parse_conversion_operation
(text, has_target=True)¶ Parses and returns a conversion operation. %target = op_code <type> <value> to <type>
ScEpTIC.llvmir_parser.instructions_parser.memory_operations module¶
-
ScEpTIC.llvmir_parser.instructions_parser.memory_operations.
is_memory_operation
(text)¶ Return if an instruction is a memory operation.
-
ScEpTIC.llvmir_parser.instructions_parser.memory_operations.
is_memory_operation_with_return
(text, operation_code=None)¶ Return if an instruction is a memory operation with a return.
-
ScEpTIC.llvmir_parser.instructions_parser.memory_operations.
is_memory_operation_without_return
(text, operation_code=None)¶ Return if an instruction is a memory operation without a return.
-
ScEpTIC.llvmir_parser.instructions_parser.memory_operations.
parse_alloca_operation
(text)¶ Parses and returns an alloca operation. <result> = alloca [inalloca] <type> [, <ty> <NumElements>] [, align <alignment>] [, addrspace(<num>)]
-
ScEpTIC.llvmir_parser.instructions_parser.memory_operations.
parse_getelementptr_operation
(text, has_target=True)¶ Parses and returns a getelementptr operation. <result> = getelementptr inbounds <ty>, <ty>* <ptrval>{, [inrange] <ty> <idx>}*
-
ScEpTIC.llvmir_parser.instructions_parser.memory_operations.
parse_load_operation
(text)¶ Parses and returns a load operation. <result> = load [volatile] <ty>, <ty>* <pointer>[, align <alignment>] <result> = load atomic [volatile] <ty>, <ty>* <pointer> [syncscope(“<target-scope>”)] <ordering>, align <alignment>
-
ScEpTIC.llvmir_parser.instructions_parser.memory_operations.
parse_memory_operation
(text)¶ - Parses and returns a memory operation.
alloca
load
getelementptr
store
-
ScEpTIC.llvmir_parser.instructions_parser.memory_operations.
parse_store_operation
(text)¶ Parses and returns a store operation. store [volatile] <ty> <value>, <ty>* <pointer>[, align <alignment>] store atomic [volatile] <ty> <value>, <ty>* <pointer> [syncscope(“<target-scope>”)] <ordering>, align <alignment>
ScEpTIC.llvmir_parser.instructions_parser.other_operations module¶
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
is_call_instruction
(text)¶ Returns if a given instruction is is a call one.
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
is_other_operation
(text, operation_code=None)¶ Returns if a given instruction is is an icmp or fcmp operation.
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
is_valid_cond
(cond, operation_code)¶ Returns if a given condition is a valid one for a given operation.
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_call_instruction
(text)¶ Parses and returns a call instruction. <result> = [tail | musttail | notail ] call [fast-math flags] [cconv] [ret attrs] <ty>|<fnty> <fnptrval>(<function args>) [fn attrs]
[ operand bundles ]
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_calling_convention
(text)¶ Parses and removes calling conventions attributes of call instruction.
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_cmp_operation
(text)¶ Parses and returns an icmp/fcmp operation. <result> = icmp <cond> <ty> <op1>, <op2> <result> = fcmp [fast-math flags]* <cond> <ty> <op1>, <op2>
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_cond_type_operands
(text, operation_code)¶ Parses and returns the condition, the type and the operands of an operation as a dict with keys {‘op1’, ‘op2’, ‘condition’} If the condition is not a valid one, it raises an exception.
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_other_operation
(text)¶ - Parses and return the other operations, which are:
icmp, fcmp
phi
select
va_arg
call
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_phi_operation
(text)¶ Parses and returns a phi operation. <result> = phi <ty> [ <val0>, <label0>], …
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_return_parameter_attr
(text)¶ Parses and removes return attributes of call instruction.
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_select_operation
(text)¶ Parses a select operation. <result> = select selty <cond>, <ty> <val1>, <ty> <val2>
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_tail_specific_attr
(text)¶ Parses and removes tail attributes of call instruction. They are not useful in my analysis (used just for optimization)
-
ScEpTIC.llvmir_parser.instructions_parser.other_operations.
parse_va_arg_instruction
(text)¶ Parses a va_arg instruction and returns it. Note: THIS IS NOT FULLY SUPPORTED BY LLVM CODE GENERATOR ON MANY TARGETS
<resultval> = va_arg <va_list*> <arglist>, <argty> %tmp = va_arg i8* %ap2, i32 It returns a value of the specified argument type and increments the va_list to point to the next argument. The actual type of va_list is target specific.
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions module¶
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
is_branch_instruction
(text)¶ Returns if an instruction is a branch.
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
is_conditional_branch_instruction
(text)¶ Returns if an instruction is a conditional branch.
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
is_ret_instruction
(text)¶ Returns if an instruction is a retturn.
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
is_switch_instruction
(text)¶ Returns if an instruction is a switch
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
is_terminator_instruction
(text)¶ Returns if an instruction is a terminator instruction.
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
is_unconditional_branch_instruction
(text)¶ Returns if an instruction is an uncoditional branch.
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
is_unreachable_instruction
(text)¶ Returns if an instruction is an unreachable.
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
parse_branch_instruction
(text)¶ Parses and returns a branch instruction.
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
parse_conditional_branch_instruction
(text)¶ Parses and returns a conditional branch. br i1 <cond>, label <iftrue>, label <iffalse>
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
parse_ret_instruction
(text)¶ Parses and returns a ret instruction.
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
parse_switch_instruction
(text)¶ Parses and returns a switch instruction. switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> … ] switch i32 %val, label %otherwise [ i32 0, label %onzero i32 1, label %onone i32 2, label %ontwo ]
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
parse_terminator_instruction
(text)¶ Parses and returns a terminator instruction. Terminator instructions:
ret:
br
switch:
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
parse_unconditional_branch_instruction
(text)¶ Parses and returns an unconditional branch.
br label <target>
-
ScEpTIC.llvmir_parser.instructions_parser.terminator_instructions.
parse_unreachable_instruction
(text)¶ Parses and returns an unreachable instruction.
ScEpTIC.llvmir_parser.instructions_parser.vector_operations module¶
-
ScEpTIC.llvmir_parser.instructions_parser.vector_operations.
is_vector_operation
(text)¶ Returns if a given instruction is a vector operation.
-
ScEpTIC.llvmir_parser.instructions_parser.vector_operations.
parse_vector_operation
(text)¶ Parses a vector operation. They are not available in C language, so are not supported for my simulation.
Module contents¶
-
ScEpTIC.llvmir_parser.instructions_parser.
parse_instruction
(text, line_number, function_name)¶ Parses and returns an instruction
- Types of instructions:
Terminator Instructions
Binary Operations
Bitwise Binary Operations
Vector Operations
Aggregate Operations
Memory Access and Addressing Operations
Conversion Operations
Other Operations