hipe_sparc_ra_ls.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 55 行
ERL
55 行
%%% $Id$%%% Linear Scan register allocator for sparc-module(hipe_sparc_ra_ls).-export([alloc/2]).-define(HIPE_INSTRUMENT_COMPILER, true). %% Turn on instrumentation.%-define(DEBUG,true).-include("../main/hipe.hrl").-define(no_temps,hipe_sparc_specific:number_of_temporaries).alloc(CFG, Options) -> ?inc_counter(ra_calls_counter,1), SpillLimit = ?no_temps(CFG), ?inc_counter(bbs_counter, length(hipe_sparc_cfg:labels(CFG))), alloc(CFG, SpillLimit, Options).alloc(SparcCfg, SpillLimit, Options) -> ?inc_counter(ra_iteration_counter,1), ?opt_start_timer("Alloc"), {Map,_NewSpillIndex} = hipe_ls_regalloc:regalloc( SparcCfg, hipe_sparc_registers:allocatable() -- %% Save temp1 and temp2 for spill load & stores [hipe_sparc_registers:temp1(),hipe_sparc_registers:temp2()], [hipe_sparc_cfg:start_label(SparcCfg)], 0, SpillLimit, Options, hipe_sparc_specific), ?opt_stop_timer("Alloc Done"), TempMap = hipe_temp_map:cols2tuple(Map, hipe_sparc_specific), %% Code to minimize stack size by allocation of temps to spillpositions ?opt_start_timer("Minimize"), {TempMap2, NewSpillIndex2} = hipe_spillmin:stackalloc(SparcCfg, [], 0, Options, hipe_sparc_specific, TempMap), TempMap3 = hipe_spillmin:mapmerge( hipe_temp_map:to_substlist(TempMap), TempMap2), ?opt_stop_timer("Minimize Done"), TempMap4 = hipe_temp_map:cols2tuple(TempMap3, hipe_sparc_specific), ?opt_start_timer("Rewrite"), NewCfg = hipe_sparc_ra_post_ls:rewrite(SparcCfg, TempMap4, Options), ?opt_stop_timer("Rewrite Done"), ?add_spills(Options, NewSpillIndex2), {NewCfg, TempMap4, NewSpillIndex2}.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?