File 2742-v3_core-Eliminate-unnecessary-calls-in-binary-compre.patch of Package erlang

From 1366df792f993c0f1674b9b1937199dc1f036778 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Mon, 16 Nov 2020 08:06:25 +0100
Subject: [PATCH 2/5] v3_core: Eliminate unnecessary =:= calls in binary
 comprehensions

The code generator for binary comprehensions generates unnecessary
calls to `=:=` to compare values that are always the same. Those calls
are optimized away in later passes, but there is no reason to generate
them in the first place.
---
 lib/compiler/src/v3_core.erl | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index b7244ac7a2..860976218a 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -1448,10 +1448,11 @@ bc_tq1(Line, E, [#igen{anno=GAnno,
     LAnno = #a{anno=LA},
     {[_,AccVar]=Vars,St2} = new_vars(LA, 2, St1),
     {[_,_]=FcVars,St3} = new_vars(LA, 2, St2),
+    {IgnoreVar,St4} = new_var(LA, St3),
     F = #c_var{anno=LA,name={Name,2}},
     Nc = #iapply{anno=GAnno,op=F,args=[Tail,AccVar]},
     Fc = function_clause(FcVars, LA),
-    TailClause = #iclause{anno=LAnno,pats=[TailPat,AccVar],guard=[],
+    TailClause = #iclause{anno=LAnno,pats=[TailPat,IgnoreVar],guard=[],
                           body=[AccVar]},
     Cs0 = case {AccPat,AccGuard} of
               {SkipPat,[]} ->
@@ -1460,21 +1461,21 @@ bc_tq1(Line, E, [#igen{anno=GAnno,
                   [TailClause];
               _ ->
                   [#iclause{anno=#a{anno=[compiler_generated|LA]},
-                            pats=[SkipPat,AccVar],guard=[],body=[Nc]},
+                            pats=[SkipPat,IgnoreVar],guard=[],body=[Nc]},
                    TailClause]
           end,
     {Cs,St} = case AccPat of
                   nomatch ->
                       %% The accumulator pattern never matches, no need
                       %% for an accumulator clause.
-                      {Cs0,St3};
+                      {Cs0,St4};
                   _ ->
-                      {Bc,Bps,St4} = bc_tq1(Line, E, Qs, AccVar, St3),
+                      {Bc,Bps,St5} = bc_tq1(Line, E, Qs, AccVar, St4),
                       Body = Bps ++ [#iset{var=AccVar,arg=Bc},Nc],
                       {[#iclause{anno=LAnno,
-                                 pats=[AccPat,AccVar],guard=AccGuard,
+                                 pats=[AccPat,IgnoreVar],guard=AccGuard,
                                  body=Body}|Cs0],
-                       St4}
+                       St5}
               end,
     Fun = #ifun{anno=LAnno,id=[],vars=Vars,clauses=Cs,fc=Fc},
     {#iletrec{anno=LAnno#a{anno=[list_comprehension|LA]},defs=[{{Name,2},Fun}],
-- 
2.26.2

openSUSE Build Service is sponsored by