Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
No build reason found for SLE-Module-Development-Tools-OBS:ppc64le
home:Ledest:erlang:24
erlang
2866-Eliminate-beam_utils-is_pure_test-1.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2866-Eliminate-beam_utils-is_pure_test-1.patch of Package erlang
From b6c937ede74ae88c232ffb790998df594b41b28b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Fri, 20 Aug 2021 06:54:12 +0200 Subject: [PATCH 6/7] Eliminate beam_utils:is_pure_test/1 --- lib/compiler/src/beam_jump.erl | 18 +++--------------- lib/compiler/src/beam_utils.erl | 29 +---------------------------- 2 files changed, 4 insertions(+), 43 deletions(-) diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl index d7915d057a..d060978a52 100644 --- a/lib/compiler/src/beam_jump.erl +++ b/lib/compiler/src/beam_jump.erl @@ -597,21 +597,9 @@ find_fixpoint(OptFun, Is0) -> Is -> find_fixpoint(OptFun, Is) end. -opt([{test,_,{f,L}=Lbl,_}=I|[{jump,{f,L}}|_]=Is], Acc, St) -> - %% We have - %% Test Label Ops - %% jump Label - %% The test instruction is not needed if the test is pure - %% (it modifies neither registers nor bit syntax state). - case beam_utils:is_pure_test(I) of - false -> - %% Test is not pure; we must keep it. - opt(Is, [I|Acc], label_used(Lbl, St)); - true -> - %% The test is pure and its failure label is the same - %% as in the jump that follows -- thus it is not needed. - opt(Is, Acc, St) - end; +opt([{test,is_eq_exact,{f,L},_}|[{jump,{f,L}}|_]=Is], Acc, St) -> + %% The is_eq_exact test is not needed. + opt(Is, Acc, St); opt([{test,Test0,{f,L}=Lbl,Ops}=I|[{jump,To}|Is]=Is0], Acc, St) -> case is_label_defined(Is, L) of false -> diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl index 437bc9b24a..816c29bc55 100644 --- a/lib/compiler/src/beam_utils.erl +++ b/lib/compiler/src/beam_utils.erl @@ -21,7 +21,7 @@ %% -module(beam_utils). --export([replace_labels/4,is_pure_test/1,split_even/1]). +-export([replace_labels/4,split_even/1]). -export_type([code_index/0,module_code/0,instruction/0]). @@ -39,11 +39,6 @@ -type module_code() :: {module(),[_],[_],[int_function()],pos_integer()}. -%% Internal types. --type fail() :: beam_asm:fail() | 'fail'. --type test() :: {'test',atom(),fail(),[beam_asm:src()]} | - {'test',atom(),fail(),integer(),list(),beam_asm:reg()}. - %% replace_labels(FunctionIs, Tail, ReplaceDb, Fallback) -> FunctionIs. %% Replace all labels in instructions according to the ReplaceDb. %% If label is not found the Fallback is called with the label to @@ -56,28 +51,6 @@ replace_labels(Is, Acc, D, Fb) -> replace_labels_1(Is, Acc, D, Fb). -%% is_pure_test({test,Op,Fail,Ops}) -> true|false. -%% Return 'true' if the test instruction does not modify any -%% registers and/or bit syntax matching state. -%% - --spec is_pure_test(test()) -> boolean(). - -is_pure_test({test,is_eq,_,[_,_]}) -> true; -is_pure_test({test,is_ne,_,[_,_]}) -> true; -is_pure_test({test,is_eq_exact,_,[_,_]}) -> true; -is_pure_test({test,is_ne_exact,_,[_,_]}) -> true; -is_pure_test({test,is_ge,_,[_,_]}) -> true; -is_pure_test({test,is_lt,_,[_,_]}) -> true; -is_pure_test({test,is_nonempty_list,_,[_]}) -> true; -is_pure_test({test,is_tagged_tuple,_,[_,_,_]}) -> true; -is_pure_test({test,test_arity,_,[_,_]}) -> true; -is_pure_test({test,has_map_fields,_,[_|_]}) -> true; -is_pure_test({test,is_bitstr,_,[_]}) -> true; -is_pure_test({test,is_function2,_,[_,_]}) -> true; -is_pure_test({test,Op,_,Ops}) -> - erl_internal:new_type_test(Op, length(Ops)). - %% split_even/1 %% [1,2,3,4,5,6] -> {[1,3,5],[2,4,6]} -- 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