Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
5122-beam_ssa_pre_codegen-Optimize-the-find_yre...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 5122-beam_ssa_pre_codegen-Optimize-the-find_yregs-sub-pas.patch of Package erlang
From b0d2c5afa9574900b37946a164cb165b37e95ff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Thu, 20 Jan 2022 13:45:44 +0100 Subject: [PATCH 2/2] beam_ssa_pre_codegen: Optimize the find_yregs sub pass This optimization make the `beam_ssa_pre_codegen` pass about twice as fast for the example in #5140. --- lib/compiler/src/beam_ssa_pre_codegen.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/compiler/src/beam_ssa_pre_codegen.erl b/lib/compiler/src/beam_ssa_pre_codegen.erl index 10bb5dc59f..23cfe27f80 100644 --- a/lib/compiler/src/beam_ssa_pre_codegen.erl +++ b/lib/compiler/src/beam_ssa_pre_codegen.erl @@ -1783,7 +1783,7 @@ find_yregs(#st{frames=[_|_]=Frames,args=Args,ssa=Blocks0}=St) -> find_yregs_1([{F,Defs}|Fs], Blocks0) -> DK = #dk{d=Defs,k=sets:new([{version, 2}])}, - D0 = #{F=>DK}, + D0 = #{F => DK,?EXCEPTION_BLOCK => DK#dk{d=[]}}, Ls = beam_ssa:rpo([F], Blocks0), Yregs0 = sets:new([{version, 2}]), Yregs = find_yregs_2(Ls, Blocks0, D0, Yregs0), @@ -1836,6 +1836,8 @@ find_defs_is([#b_set{dst=Dst}|Is], Acc) -> find_defs_is(Is, [Dst|Acc]); find_defs_is([], Acc) -> Acc. +find_update_succ([?EXCEPTION_BLOCK|Ss], DK, D) -> + find_update_succ(Ss, DK, D); find_update_succ([S|Ss], #dk{d=Defs0,k=Killed0}=DK0, D0) -> case D0 of #{S:=#dk{d=Defs1,k=Killed1}} -> -- 2.31.1
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