File 2005-Reduce-register-shuffling-in-receive-clauses.patch of Package erlang

From cada4236a5c952cfcccf6dafe6f9ac25d171529e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Tue, 19 Dec 2017 10:11:59 +0100
Subject: [PATCH] Reduce register shuffling in receive clauses

Handle a few more instructions in beam_utils. That will allow
beam_reorder to reorder more instructions, delaying get_tuple_element
instructions and reducing register shuffling in receive clauses.
---
 lib/compiler/src/beam_utils.erl | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index e61d6a43b4..60221578bd 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -593,6 +593,10 @@ check_liveness(R, [{allocate_zero,N,Live}|Is], St) ->
 check_liveness(R, [{get_list,S,D1,D2}|Is], St) ->
     I = {block,[{set,[D1,D2],[S],get_list}]},
     check_liveness(R, [I|Is], St);
+check_liveness(R, [remove_message|Is], St) ->
+    check_liveness(R, Is, St);
+check_liveness({x,X}, [build_stacktrace|_], St) when X > 0 ->
+    {killed,St};
 check_liveness(_R, Is, St) when is_list(Is) ->
     %% Not implemented. Conservatively assume that the register is used.
     {used,St}.
-- 
2.15.1

openSUSE Build Service is sponsored by