ScEpTIC.AST.transformations.virtual_memory.analysis package¶
Submodules¶
ScEpTIC.AST.transformations.virtual_memory.analysis.memory_instructions_indentifier module¶
-
class
ScEpTIC.AST.transformations.virtual_memory.analysis.memory_instructions_indentifier.
MemoryInstructionsIdentifier
¶ Bases:
object
This class contains the analysis required for identifying the first/last memory read/write instructions.
-
static
resolve_first_reads_writes
(basic_blocks, only_nvm=False, conditional_container=None, conditional_path=None)¶ - Analyses the provided sequence of basic blocks and returns:
the list of all the read instructions that can execute before any write
the list of all the write instructions that can execute as first
Each list is a python dictionary, whose key is the memory tag
-
static
resolve_last_reads_writes
(basic_blocks, only_nvm=False, conditional_container=None, conditional_path=None)¶ - Analyses the provided sequence of basic blocks and returns:
the list of all the read instructions that can execute after any write
the list of all the write instructions that can execute as last
Each list is a python dictionary, whose key is the memory tag
-
static
ScEpTIC.AST.transformations.virtual_memory.analysis.memory_usage module¶
-
class
ScEpTIC.AST.transformations.virtual_memory.analysis.memory_usage.
MemoryUsage
¶ Bases:
object
-
static
get_base_memory_tag
(memory_tag)¶ Returns the base memory tag, that is, a scalar-equivalent memory tag e.g. a[0] -> returns a[]
-
static
get_memory_usage_list
(computation_intervals, order_function, initial_alive_tags)¶ Analyses the memory tags that need to be preserved across power failures :returns:
set of the tags that the function gets from outside its stack frame
set of the tags that the function writes outside its stack frame
list of the tags that need to be preserved, for each computation interval
Outside-frame accesses supported only for global variables. TODO: pointers (not required for evaluation)
-
static
get_outside_frame_read_volatile
(before_call_data, outside_frame_reads)¶ Computes the elements that need to be retrieved from volatile memory
-
static
get_unique_volatile_elements
(volatile_elements, merge_data={})¶ Merges volatile_elements and merge_data Parses retrieved volatile data and returns unique sets for each function
-
static
get_volatile_elements_after_calls
(computation_intervals, order_function, checkpoint_function_name)¶ Returns for each function the memory tags whose store can target volatile memory Does not support call depth > 1 (sufficient for evaluation) TODO: support call depth > 1
-
static
get_volatile_elements_before_calls
(computation_intervals, order_function, checkpoint_function_name)¶ Returns for each function the memory tags whose reads can target volatile memory Does not support call depth > 1 (sufficient for evaluation) TODO: support call depth > 1
-
static
remove_after_call_data_from_outside_frame_writes
(after_call_data, outside_frame_writes)¶ Computes the elements that need to be preserved by the function call that has only one computation interval. The method returns a list of sets (one set per call to the function)
-
static
ScEpTIC.AST.transformations.virtual_memory.analysis.nvm_instructions_identifier module¶
-
class
ScEpTIC.AST.transformations.virtual_memory.analysis.nvm_instructions_identifier.
NVMInstructionsIdentifier
¶ Bases:
object
Class for identifying specific sets of NVM read/write instructions
-
static
already_processed
(metadata)¶ Returns if the metadata has already been processed due to instructions included in previous instructions
-
static
identify_nvm_instruction
(basic_blocks, conditional_container=None, conditional_path=None)¶ Identifies all the NVM read/write instructions in basic_block
-
static
identify_nvm_instructions_to_consolidate
(metadata, n_min_function)¶
-
static
ScEpTIC.AST.transformations.virtual_memory.analysis.registers_usage module¶
-
class
ScEpTIC.AST.transformations.virtual_memory.analysis.registers_usage.
RegistersUsage
¶ Bases:
object
-
static
account_for_pc_save_only
(comp_int_manager, name)¶ Adjust checkpoints that need to save the stack pointer (that is, if a checpoint need to save a register, except PC) If a checkpoint need to save only the PC (that is, checkpoint_save_esp = False) -> no 2-phase-commit needed as PC save is atomic
-
static
get_alloca_regs
(computation_intervals, n_args)¶ Returns the registers that are target of alloca instructions
-
static
get_regs_first_use_def
(basic_blocks, alloca_regs)¶ - Returns two lists:
registers whose use happens before their defs
registers defined
-
static
reset_register_info
(comp_int_manager, name)¶ Resets the register-saving information associated to each checkpoint
-
static
set_checkpoints_esp_reg
(comp_int_manager, name)¶ Sets the checkpoints in the computation interval that need to save the stack pointer
-
static
set_checkpoints_general_purpose_regs
(comp_int_manager, name)¶ Sets the general purpose registers that each checkpoint in the computation interval need to save
-
static
set_checkpoints_regs
(comp_int_manager)¶ Identifies the registers that each checkpoints need to save
-
static