Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:26
erlang
1321-beam_ssa_type-Simplify-bs_create_bin-to-li...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 1321-beam_ssa_type-Simplify-bs_create_bin-to-literals-whe.patch of Package erlang
From f1167f5f274dd628d4e221fb63d983facb9e05ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org> Date: Tue, 4 Jul 2023 16:50:10 +0200 Subject: [PATCH] beam_ssa_type: Simplify bs_create_bin to literals when possible --- lib/compiler/src/beam_ssa_type.erl | 33 ++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/compiler/src/beam_ssa_type.erl b/lib/compiler/src/beam_ssa_type.erl index b530442e1f..624f9353c3 100644 --- a/lib/compiler/src/beam_ssa_type.erl +++ b/lib/compiler/src/beam_ssa_type.erl @@ -1043,17 +1043,28 @@ simplify(#b_set{op=bs_match,dst=Dst,args=Args0}=I0, Ts0, Ds0, _Ls, Sub) -> simplify(#b_set{op=bs_create_bin=Op,dst=Dst,args=Args0,anno=Anno}=I0, Ts0, Ds0, _Ls, Sub) -> Args = simplify_args(Args0, Ts0, Sub), - I1 = I0#b_set{args=Args}, - #t_bitstring{size_unit=Unit} = T = type(Op, Args, Anno, Ts0, Ds0), - I2 = case T of - #t_bitstring{appendable=true} -> - beam_ssa:add_anno(result_type, T, I1); - _ -> I1 - end, - I = beam_ssa:add_anno(unit, Unit, I2), - Ts = Ts0#{ Dst => T }, - Ds = Ds0#{ Dst => I }, - {I, Ts, Ds}; + + case Args of + [#b_literal{val=binary}, + #b_literal{val=[1|_]}, + #b_literal{val=Bitstring}=Lit, + #b_literal{val=all}] when is_bitstring(Bitstring) -> + %% If all we're doing is creating a single constant bitstring, we + %% may as well return it directly. + Sub#{ Dst => Lit }; + [_|_] -> + I1 = I0#b_set{args=Args}, + #t_bitstring{size_unit=Unit} = T = type(Op, Args, Anno, Ts0, Ds0), + I2 = case T of + #t_bitstring{appendable=true} -> + beam_ssa:add_anno(result_type, T, I1); + _ -> I1 + end, + I = beam_ssa:add_anno(unit, Unit, I2), + Ts = Ts0#{ Dst => T }, + Ds = Ds0#{ Dst => I }, + {I, Ts, Ds} + end; simplify(#b_set{dst=Dst,args=Args0}=I0, Ts0, Ds0, _Ls, Sub) -> Args = simplify_args(Args0, Ts0, Sub), I1 = beam_ssa:normalize(I0#b_set{args=Args}), -- 2.35.3
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