Caml1999I037 +6Unbox_specialised_args7rewrite_set_of_closures#env7Inline_and_simplify_aux#Env!t@@@@@2duplicate_function#env#Env!t@@@@@/set_of_closures'Flambda/set_of_closures@@@@@'fun_var(Variable!t@@@@@+new_fun_var!t@@@@@@&4function_declaration@@@@!#Map!t6.specialised_to@@@@@@@@@@@@@@@@@@/set_of_closuresC/set_of_closures@@@@@&optionL@S$expr@@@@-Inlining_cost'Benefit!t@@@@@@@@@@@@@@@ -middle_end/flambda/unbox_specialised_args.mligr  @@@@@@ %c),6Unbox_specialised_args0jhV7_:8k (Warnings0Ef{&(Variable0?l猵eY2Var_within_closure0``ݗXFR⠠)Unit_info0'T Χ@aR%Types0"|Vȷ`X .Type_immediacy00$ jbv\"k&#Tag0&b rٍ&Symbol03E?Y7(%Subst0=aqT/!p+-Stdlib__Uchar0=H^V9>ɠ+Stdlib__Sys0b'8=OIn.Stdlib__String0 w_OA4D"Q~~+Stdlib__Set0ܔ@Z8XWaa2+Stdlib__Seq0?72#[O.Stdlib__Result0p~ !ԥ//+Stdlib__Map0*4ɇ2.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Digest0#z25I*.Stdlib__Buffer0,I[?z&Stdlib0t0VoS%{<F:0Static_exception0Jmyrqܒx-8ɞ3Simple_value_approx0 c[k%S\KѠ%Shape0 M``ll6Set_of_closures_origin0!YA _XO 2Set_of_closures_id0LbO`ܩ&M*Projection02hS xj56)Primitive0dU=\I/}$Path0k.tbGmᠠ)Parsetree0v o[pY Y)Parameter0zk^f2my19+Outcometree0BuG^)= 9c 'Numbers0 q޷He0Mutable_variable0CQᷧ$$Misc0]\/j*^e)Longident0wP q;ɡ(Location0nBɊOn?7~ؠ)Load_path0,j " nn7ݠ,Linkage_name0tԈK1G&Lambda0=qvsL E 7Internal_variable_names0TbgѹG+L4Inlining_stats_types0)x0pukC\-Inlining_cost0i(wypP1 󰠠7Inline_and_simplify_aux0E#X̕B,;x ,Identifiable0]/*N %Ident0>ЃzV)j⠠*Freshening0xW("-9wVԠ*Format_doc0uy@GmWUࠠ'Flambda0VJ͟)Export_id0CJ9DןRa7ݷ$E#Env0gu{u9?*a2@)Debuginfo0_ |PooGq*Data_types0v\3,Svh0Compilation_unit0Dl ]wN*Cmi_format08zR^.Closure_origin0!Havl5"_*Closure_id0 (?$/Closure_element0ǔf#M2Clambda_primitives0|& %ZIǝz0CamlinternalLazy0zY# #4#-8CamlinternalFormatBasics0|.e1R$|o5Build_path_prefix_map0DGl}%Y5Lhi,Backend_intf0󋚕LQ:X^r#(Asttypes0eT$BbRM dc/Allocated_const0/vVǟx@@@Caml1999T037)pC6Unbox_specialised_args*ocaml.text&_none_@@A O When approximations of specialised arguments indicate that they are closures or blocks, add more specialised arguments corresponding to the projections from such blocks (with definitions of such projections lifted out), such that the original specialised arguments may later be eliminated. This in particular enables elimination of closure allocations in examples such as: let rec map f = function | [] -> [] | a::l -> let r = f a in r :: map f l let g x = map (fun y -> x + y) [1; 2; 3; 4] Here, the specialised version of [map] initially has a specialised argument [f]; and upon inlining there will be a projection of [x] from the closure of [f]. This pass adds a new specialised argument to carry that projection, at which point the closure of [f] is redundant. -middle_end/flambda/unbox_specialised_args.mliQe@@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@A7rewrite_set_of_closuresgg@б#envг7Inline_and_simplify_aux#Env!t7Inline_and_simplify_auxhh@ hh@@hh@ @@@@@ )@@б2duplicate_functionб#envг)#Env!t7Inline_and_simplify_auxkr}kr@ krkr@@krkr@ @@@@@ *@@б/set_of_closuresг'Flambda/set_of_closures'Flambdall@ ll@@@@@@ @@б'fun_varг(Variable!t(Variablemm@ mm@@@@@@ @@б+new_fun_varг!t(Variable/n0n@ 3n 4n @@@@@@6 @@В@гR4function_declaration'FlambdaIo  Jo  @ Mo  No  %@@@@@@P @@@гO#Map!t(Variableep & Efp & M@ ip & Njp & Q@@np & Rop & S@ @г.specialised_to'Flambda}p & .~p & 5@ p & 6p & D@@@@@@' @@@2@@@)@@@@A@ @@*K%@@tb@@+ @@,n+@@@@- @@.m1@@@@/ @@0l7@@@@1 @@2kry=@@б/set_of_closuresг/set_of_closures'Flambdaq U jq U q@ q U rq U @@@@@@3° @@г!&optionr  r  @В@г$expr'Flambdar  r  @ r  r  @@@@@@4 @@@г-Inlining_cost'Benefit!t-Inlining_costr  r  @ r  r  @@r  r  @ @@@@@U @@@@+@ @@V5 @@@N @@@Xr  L@@n\@@Y @@Zq U ZR@@_~@@[ @@\!%jX]X@@m@@] @@^'+h^@@@.ga@@F@@@c@@.@@@30//00000@/ @A@ H************************************************************************9A@@:A@L@ H ?BMM@BM@ H OCaml ECFC@ H KDLD3@ H Pierre Chambart, OCamlPro QE44RE4@ H Mark Shinwell and Leo White, Jane Street Europe WFXF@ H ]G^G@ H Copyright 2013--2016 OCamlPro SAS cHdHg@ H Copyright 2014--2016 Jane Street Group LLC iIhhjIh@ H oJpJ@ H All rights reserved. This file is distributed under the terms of uKvKN@ H the GNU Lesser General Public License version 2.1, with the {LOO|LO@ H special exception on linking described in the file LICENSE. MM@ H NN5@ H************************************************************************O66O6@ P* When approximations of specialised arguments indicate that they are closures or blocks, add more specialised arguments corresponding to the projections from such blocks (with definitions of such projections lifted out), such that the original specialised arguments may later be eliminated. This in particular enables elimination of closure allocations in examples such as: let rec map f = function | [] -> [] | a::l -> let r = f a in r :: map f l let g x = map (fun y -> x + y) [1; 2; 3; 4] Here, the specialised version of [map] initially has a specialised argument [f]; and upon inlining there will be a projection of [x] from the closure of [f]. This pass adds a new specialised argument to carry that projection, at which point the closure of [f] is redundant.  4 CR-soon mshinwell: eliminate superfluous parameter iiW@@-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I2middle_end/flambda"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-cӐ J/home/ci/builds/workspace/precheck/flambda/false/label/ocaml-ubuntu-latest >10/.-,+*)('&%$#"! @@04ױ,Lj Fj 3@@@/Allocated_const0/vVǟx(Asttypes0eT$BbRM dc,Backend_intf0󋚕LQ:X^r#5Build_path_prefix_map0DGl}%Y5Lhi8CamlinternalFormatBasics0|.e1R$|o0CamlinternalLazy0zY# #4#-2Clambda_primitives0|& %ZIǝz/Closure_element0ǔf#M*Closure_id0 (?$.Closure_origin0!Havl5"_*Cmi_format08zR^0Compilation_unit0Dl ]wN*Data_types0v\3,Svh)Debuginfo0_ |PooGq#Env0gu{u9?*a2@)Export_id0CJ9DןRa7ݷ$E'Flambda0VJ͟*Format_doc0uy@GmWUࠠ*Freshening0xW("-9wVԠ%Ident0>ЃzV)j⠠,Identifiable0]/*N 0E#X̕B,;x -Inlining_cost0i(wypP1 󰠠4Inlining_stats_types0)x0pukC\7Internal_variable_names0TbgѹG+L&Lambda0=qvsL E ,Linkage_name0tԈK1G)Load_path0,j " nn7ݠ(Location0nBɊOn?7~ؠ)Longident0wP q;ɡ$Misc0]\/j*^e0Mutable_variable0CQᷧ$'Numbers0 q޷He+Outcometree0BuG^)= 9c )Parameter0zk^f2my19)Parsetree0v o[pY Y$Path0k.tbGmᠠ)Primitive0dU=\I/}*Projection02hS xj562Set_of_closures_id0LbO`ܩ&M6Set_of_closures_origin0!YA _XO %Shape0 M``ll3Simple_value_approx0 c[k%S\KѠ0Static_exception0Jmyrqܒx-8ɞ&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Digest0#z25I*.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Either0HD ?|>.Stdlib__Format0b HvkR/Stdlib__Hashtbl0(L%bԠ-Stdlib__Int640q=cT?Q1ˠ,Stdlib__Lazy0$1mlࠠ.Stdlib__Lexing0^m|e+Stdlib__Map0*4ɇ2ɠ%Subst0=aqT/!p+&Symbol03E?Y7(#Tag0&b rٍ.Type_immediacy00$ jbv\"k&%Types0"|Vȷ`X S0jhV7_:8k )Unit_info0'T Χ@aR2Var_within_closure0``ݗXFR⠠(Variable0?l猵eY(Warnings0Ef{&@0jhV7_:8k AAC)@@@@@@@@@@@@@@@@@P@@