aboutsummaryrefslogtreecommitdiffstats
path: root/lib/hipe/rtl
diff options
context:
space:
mode:
authorMagnus Lång <[email protected]>2016-11-09 18:47:12 +0100
committerMagnus Lång <[email protected]>2016-11-15 14:58:59 +0100
commitc91c523f1ca58644267402325b6fb59d65049829 (patch)
treec355fdf2a07ff894cbb8f1cc1bea7abcb889dd0b /lib/hipe/rtl
parentca0fbe891d0f8278b4824d6b2c5db4cd01fcef5c (diff)
downloadotp-c91c523f1ca58644267402325b6fb59d65049829.tar.gz
otp-c91c523f1ca58644267402325b6fb59d65049829.tar.bz2
otp-c91c523f1ca58644267402325b6fb59d65049829.zip
hipe_rtl: drop alub dest when unused
Diffstat (limited to 'lib/hipe/rtl')
-rw-r--r--lib/hipe/rtl/hipe_rtl.erl19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/hipe/rtl/hipe_rtl.erl b/lib/hipe/rtl/hipe_rtl.erl
index e4e857ec43..d39969a0ed 100644
--- a/lib/hipe/rtl/hipe_rtl.erl
+++ b/lib/hipe/rtl/hipe_rtl.erl
@@ -334,6 +334,7 @@
defines/1,
redirect_jmp/3,
is_safe/1,
+ reduce_unused/1,
%% highest_var/1,
pp/1,
pp/2,
@@ -1314,6 +1315,24 @@ is_safe(Instr) ->
#switch{} -> false %% Maybe this is safe...
end.
+%% @spec reduce_unused(rtl_instruction())
+%% -> false | [rtl_instruction()].
+%%
+%% @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).
+
+reduce_unused(Instr) ->
+ case Instr of
+ #alub{dst=Dst} when Dst =/= [] ->
+ [Instr#alub{dst=[]}];
+ _ ->
+ case is_safe(Instr) of
+ true -> [];
+ false -> false
+ end
+ end.
+
%%
%% True if argument is an alu-operator
%%