hipe_icode_liveness.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 87 行
ERL
87 行
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ICODE LIVENESS ANALYSIS%%-module(hipe_icode_liveness).-define(PRETTY_PRINT,true).-include("../flow/liveness.inc").%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Interface to CFG and icode.%%cfg_bb(CFG, L) -> hipe_icode_cfg:bb(CFG, L).cfg_postorder(CFG) -> hipe_icode_cfg:postorder(CFG).cfg_succ_map(CFG) -> hipe_icode_cfg:succ_map(CFG).cfg_succ(CFG, L) -> hipe_icode_cfg:succ(CFG, L).uses(Instr) -> hipe_icode:uses(Instr).defines(Instr) -> hipe_icode:defines(Instr).%%%% This is the list of registers that are live at exit from a function%%cfg_labels(CFG) -> hipe_icode_cfg:labels(CFG).liveout_no_succ() -> ordsets:new().pp_liveness_info(LiveList) -> print_live_list(LiveList).print_live_list([]) -> io:format(" none~n", []);print_live_list([Last]) -> io:format(" ", []), print_var(Last), io:format("~n", []);print_live_list([Var|Rest]) -> io:format(" ", []), print_var(Var), io:format(",", []), print_live_list(Rest).pp_block(Label, CFG) -> BB=hipe_icode_cfg:bb(CFG, Label), Code=hipe_bb:code(BB), hipe_icode_pp:pp_block(Code).print_var({var, V, T}) -> case erl_types:t_is_none(T) of true-> io:format("v~p", [V]); _ -> io:format("v~p (~s)", [V, erl_types:t_to_string(T)]) end;print_var({var, V}) -> io:format("v~p", [V]);print_var({fvar, V}) -> io:format("fv~p", [V]);print_var({reg, V}) -> io:format("r~p", [V]).%%%% The following are used only if annotation of the code is requested.%%-ifdef(DEBUG_LIVENESS).cfg_bb_add(CFG, L, NewBB) -> hipe_icode_cfg:bb_add(CFG, L, NewBB).mk_comment(Text) -> hipe_icode:mk_comment(Text).-endif.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?