Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
5121-beam_ssa-Optimize-dominator-calculation.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 5121-beam_ssa-Optimize-dominator-calculation.patch of Package erlang
From 33112e74a97ee877eb54a9f54ed01c059cf36965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Thu, 20 Jan 2022 08:43:05 +0100 Subject: [PATCH 1/2] beam_ssa: Optimize dominator calculation Optimize functions with a huge number of blocks where all blocks are dominated by block 0. This optimization will make the `beam_ssa_pre_codegen` pass run more than twice as fast for the example in #5140. While at it, clean up indentation in `dom_intersection_1/3`. --- lib/compiler/src/beam_ssa.erl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/compiler/src/beam_ssa.erl b/lib/compiler/src/beam_ssa.erl index e2688b7fa9..85da3b5937 100644 --- a/lib/compiler/src/beam_ssa.erl +++ b/lib/compiler/src/beam_ssa.erl @@ -785,6 +785,9 @@ dom_intersection([S], _Df) -> dom_intersection([S|Ss], Df) -> dom_intersection(S, Ss, Df). +dom_intersection([0]=S, [_|_], _Df) -> + %% No need to continue. (We KNOW that all sets end in [0].) + S; dom_intersection(S1, [S2|Ss], Df) -> dom_intersection(dom_intersection_1(S1, S2, Df), Ss, Df); dom_intersection(S, [], _Df) -> S. @@ -793,11 +796,12 @@ dom_intersection_1([E1|Es1]=Set1, [E2|Es2]=Set2, Df) -> %% Blocks are numbered in the order they are found in %% reverse postorder. #{E1:=Df1,E2:=Df2} = Df, - if Df1 > Df2 -> + if + Df1 > Df2 -> dom_intersection_1(Es1, Set2, Df); - Df2 > Df1 -> - dom_intersection_1(Es2, Set1, Df); %switch arguments! - true -> %Set1 == Set2 + Df2 > Df1 -> + dom_intersection_1(Es2, Set1, Df); %switch arguments + true -> %Set1 == Set2 %% The common suffix of the sets is the intersection. Set1 end. -- 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