diff options
Diffstat (limited to 'lib/hipe/icode/hipe_icode.erl')
| -rw-r--r-- | lib/hipe/icode/hipe_icode.erl | 26 | 
1 files changed, 17 insertions, 9 deletions
| diff --git a/lib/hipe/icode/hipe_icode.erl b/lib/hipe/icode/hipe_icode.erl index 13a0bf6141..24b7ac4783 100644 --- a/lib/hipe/icode/hipe_icode.erl +++ b/lib/hipe/icode/hipe_icode.erl @@ -1,9 +1,5 @@  %% -*- erlang-indent-level: 2 -*-  %% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2001-2016. All Rights Reserved. -%%  %% Licensed under the Apache License, Version 2.0 (the "License");  %% you may not use this file except in compliance with the License.  %% You may obtain a copy of the License at @@ -16,8 +12,6 @@  %% See the License for the specific language governing permissions and  %% limitations under the License.  %% -%% %CopyrightEnd% -%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% HiPE Intermediate Code  %% ==================================================================== @@ -30,9 +24,6 @@  %%              2003-03-15 ES ([email protected]):  %%                             Started commenting in Edoc.  %%                             Moved pretty printer to separate file. -%% -%% $Id$ -%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%@doc @@ -438,6 +429,7 @@  	 if_true_label/1,  	 if_false_label/1,  	 if_args/1, +	 if_args_update/2,  	 if_pred/1,  	 %% is_if/1, @@ -594,6 +586,7 @@  	 uses/1,  	 defines/1,  	 is_safe/1, +	 reduce_unused/1,  	 strip_comments/1,  	 subst/2,  	 subst_uses/2, @@ -713,6 +706,9 @@ if_op_update(IF, NewOp) -> IF#icode_if{op=NewOp}.  -spec if_args(#icode_if{}) -> [icode_term_arg()].  if_args(#icode_if{args=Args}) -> Args. +-spec if_args_update(#icode_if{}, [icode_term_arg()]) -> #icode_if{}. +if_args_update(IF, Args) -> IF#icode_if{args=Args}. +  -spec if_true_label(#icode_if{}) -> icode_lbl().  if_true_label(#icode_if{true_label=TrueLbl}) -> TrueLbl. @@ -1765,6 +1761,18 @@ is_safe(Instr) ->      #icode_end_try{} -> false    end. +%% @doc Produces a simplified instruction sequence that is equivalent to [Instr] +%% under the assumption that all results of Instr are unused, or 'false' if +%% there is no such sequence (other than [Instr] itself). + +-spec reduce_unused(icode_instr()) -> false | [icode_instr()]. + +reduce_unused(Instr) -> +  case is_safe(Instr) of +    true -> []; +    false -> false +  end. +  %%-----------------------------------------------------------------------  -spec highest_var(icode_instrs()) -> non_neg_integer(). | 
