File 3101-beam_ssa_codegen-Don-t-break-bs_match-sequences-by-m.patch of Package erlang

From 07697d39e2cdc142919a610f29739ca0eb82e620 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Mon, 2 Jan 2023 16:19:37 +0100
Subject: [PATCH] beam_ssa_codegen: Don't break bs_match sequences by mixing
 registers

---
 lib/compiler/src/beam_ssa_codegen.erl |  7 +++++++
 lib/compiler/test/bs_match_SUITE.erl  | 21 +++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/lib/compiler/src/beam_ssa_codegen.erl b/lib/compiler/src/beam_ssa_codegen.erl
index 3ff24ae322..64f9363085 100644
--- a/lib/compiler/src/beam_ssa_codegen.erl
+++ b/lib/compiler/src/beam_ssa_codegen.erl
@@ -485,6 +485,13 @@ prefer_xregs_is([#cg_set{op=call,dst=Dst}=I0|Is], St, Copies, Acc) ->
 prefer_xregs_is([#cg_set{op=old_make_fun,dst=Dst}=I0|Is], St, Copies, Acc) ->
     I = prefer_xregs_call(I0, Copies, St),
     prefer_xregs_is(Is, St, #{Dst=>{x,0}}, [I|Acc]);
+prefer_xregs_is([#cg_set{op=Op}=I|Is], St, Copies0, Acc)
+  when Op =:= bs_checked_get;
+       Op =:= bs_checked_skip;
+       Op =:= bs_checked_get_tail;
+       Op =:= bs_ensure ->
+    Copies = prefer_xregs_prune(I, Copies0, St),
+    prefer_xregs_is(Is, St, Copies, [I|Acc]);
 prefer_xregs_is([#cg_set{args=Args0}=I0|Is], St, Copies0, Acc) ->
     Args = [do_prefer_xreg(A, Copies0, St) || A <- Args0],
     I = I0#cg_set{args=Args},
-- 
2.35.3

openSUSE Build Service is sponsored by