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