32 lines
1.5 KiB
Python
32 lines
1.5 KiB
Python
from ScEpTIC.AST.transformations.virtual_memory.analysis.memory_usage import MemoryUsage
|
|
from ScEpTIC.AST.transformations.virtual_memory.analysis.registers_usage import RegistersUsage
|
|
from ScEpTIC.AST.transformations.virtual_memory.computation_intervals_manager import ComputationIntervalsManager
|
|
from ScEpTIC.AST.transformations.virtual_memory.elements.loop_block import LoopBlock
|
|
from ScEpTIC.AST.transformations.virtual_memory.parsers.ast_parser import ASTParser
|
|
from ScEpTIC.AST.transformations.virtual_memory.parsers.memory_tags_parser import MemoryTagsParser
|
|
|
|
|
|
def apply_transformation(functions, vmstate, f_declarations):
|
|
config = vmstate.config.ast_transformations.virtual_memory
|
|
|
|
checkpoint_function_name = vmstate.config.state_retention.state_save_function_name
|
|
main_function_name = vmstate.config.program.main_function_name
|
|
|
|
parser = ASTParser(functions)
|
|
parser.parse()
|
|
|
|
mem_parser = MemoryTagsParser(parser)
|
|
mem_parser.resolve_memory_tags()
|
|
|
|
comp_int_manager = ComputationIntervalsManager(parser, mem_parser, checkpoint_function_name, config.n_min_function, main_function_name)
|
|
comp_int_manager.split_computation_intervals()
|
|
comp_int_manager.apply_virtual_memory_transformations(config.optimize_memory)
|
|
|
|
if config.optimize_saved_registers:
|
|
RegistersUsage.set_checkpoints_regs(comp_int_manager)
|
|
|
|
comp_int_manager.synchronize_to_ast()
|
|
parser.syncrhonize_ast_to_functions()
|
|
|
|
#comp_int_manager.print_computation_intervals()
|