Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
home:Ledest:erlang:23
erlang
2742-v3_core-Eliminate-unnecessary-calls-in-bin...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor