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!t2.specialised_to@@@@@@@@@@@@@@@@/set_of_closures=/set_of_closures@@@&optionL@M$expr@@@@-Inlining_cost'Benefit!t@@@@@@@@@@@@@@@ -middle_end/flambda/unbox_specialised_args.mligr  @@@@@@ %c),6Unbox_specialised_args0zM;FA g?(Warnings0mJɒkgrs-Stdlib__Uchar056uf4[_+Stdlib__Sys0 -ռ鱦s5/.Stdlib__String0Vê>)Longident0s `7mɕc(Location0a7cK_H%9)Load_path0I@18 ~,Linkage_name0EwKсڊs&Lambda0z1x]&ZT7Internal_variable_names0HdeՄL ԩ4Inlining_stats_types0|Ca~T E~O-Inlining_cost0,30`JD:G2P͠7Inline_and_simplify_aux0#%ۈR bF,Identifiable0 {d\FX'`%Ident0">WA+9*X*Freshening0/^*b1R*Format_doc0]mWϓ:Mݠ'Flambda0Idvu ")Export_id0-bw+LO#Env0zV L{YWI)Debuginfo0PtJ=^w/*Data_types0I'Ue`wq]Ѡ0Compilation_unit0 {p-Vg_*Cmi_format0c˯7͗ԩmݠ.Closure_origin0vˆtT{(}z*Closure_id05:z[ކ/Closure_element0YWZ̡Q.hV&2Clambda_primitives01U10CamlinternalLazy0&͂7 Pˆ8CamlinternalFormatBasics0%FU(Q/Tu5Build_path_prefix_map0z HkGs,Backend_intf0)LSxjf1(Asttypes0>n{T8cئ/Allocated_const0ЖݔTW@@@Caml1999T037(GbYC6Unbox_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;@@@A@@@@@:@A@$charB;@@A@@@@@>@A@&stringQ;@@ A@@@@@B@@@%bytesC;@@ A@@@@@F@@@%floatD;@@A@@@@@J@@@$boolE;@@%falsec@@T@$trued@@Z@@@A@@@@@[@A@$unitF;@@"()e@@e@@@A@@@@@f@A@ #exnG;@@@A@@@@@j@@@#effH;@@O@A@A@@@@@@s@@@,continuationI;@@Q@@P@B@A@nY@@@@@@@@@%arrayJ;@@R@A@A@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.Assert_failure`#@@@@@J@@@@@@@@[@@A=ocaml.warn_on_literal_pattern @ @0Division_by_zero]#@@@A  @+End_of_file\#$@@@A@'FailureY#,@'@@A!$$@0Invalid_argumentX#5@0@@A*$-#-@-Match_failureV#>@@=@9@;@@a@@A;5>4>@)Not_foundZ#O@@@AC=F<F@-Out_of_memoryW#W@@@AKENDN@.Stack_overflow^#_@@@ASMVLV@.Sys_blocked_io_#g@@@A[U^T^@)Sys_error[#o@j@@Ad^g]g@:Undefined_recursive_modulea#x@@w@s@u@@h@@Auoxnx@:Continuation_already_takenb#@@@A}wv@&Stdlib@Ax7rewrite_set_of_closuresgg@б#envг7Inline_and_simplify_aux#Env!t7Inline_and_simplify_auxhh@ hh@@hh@ @@@@@O@@б2duplicate_functionб#envг)#Env!t7Inline_and_simplify_auxkr}kr@ krkr@@krkr@ @@@@@Pɰ@@б/set_of_closuresг'Flambda/set_of_closures'Flambdall@ ll@@@@@@ # @@б'fun_varг(Variable!t(Variablemm@ mm@@@@@@  @@б+new_fun_varг!t(Variablenn@ n n @@@@@@  @@В@гR4function_declaration'Flambda.o  /o  @ 2o  3o  %@@@@@@ 5 @@@гO#Map!t(VariableJp & EKp & M@ Np & NOp & Q@@Sp & RTp & S@ @г.specialised_to'Flambdabp & .cp & 5@ fp & 6gp & D@@@@@@i @@@2@@@n@@@@A@ @@uK%@@t` @@x|n)@@~@@|m-@@@@l1@@@@kry5@@б/set_of_closuresг/set_of_closures'Flambdaq U jq U q@ q U rq U @@@@@@ @@г &optionr  r  @В@г$expr'Flambdar  r  @ r  r  @@@@@@ð @@@г-Inlining_cost'Benefit!t-Inlining_costr  r  @ r  r  @@r  r  @ @@@@@@@@@+@ @@5 @@@N @@@r  L@@nZ@@q U ZP@@Ux@@jX]T@@~_@@hX@@@g[@@@@@]@@@@@3@ @A@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H "D#D3@ H Pierre Chambart, OCamlPro (E44)E4@ H Mark Shinwell and Leo White, Jane Street Europe .F/F@ H 4G5G@ H Copyright 2013--2016 OCamlPro SAS :H;Hg@ H Copyright 2014--2016 Jane Street Group LLC @IhhAIh@ H FJGJ@ H All rights reserved. This file is distributed under the terms of LKMKN@ H the GNU Lesser General Public License version 2.1, with the RLOOSLO@ H special exception on linking described in the file LICENSE. XMYM@ H ^N_N5@ H************************************************************************dO66eO6@ 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. j 4 CR-soon mshinwell: eliminate superfluous parameter miniW@@-./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 =/builds/workspace/precheck/flambda/false/label/ocaml-linux-32 >10/.-,+*)('&%$#"! @@04ױ,Lj Fj 3@@@/Allocated_const0ЖݔTWŠ(Asttypes0>n{T8cئ,Backend_intf0)LSxjf15Build_path_prefix_map0z HkGs8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ2Clambda_primitives01U1/Closure_element0YWZ̡Q.hV&*Closure_id05:z[ކ.Closure_origin0vˆtT{(}z*Cmi_format0c˯7͗ԩmݠ0Compilation_unit0 {p-Vg_*Data_types0I'Ue`wq]Ѡ)Debuginfo0PtJ=^w/#Env0zV L{YWI)Export_id0-bw+LO'Flambda0Idvu "*Format_doc0]mWϓ:Mݠ*Freshening0/^*b1R%Ident0">WA+9*X,Identifiable0 {d\FX'`0#%ۈR bF-Inlining_cost0,30`JD:G2P͠4Inlining_stats_types0|Ca~T E~O7Internal_variable_names0HdeՄL ԩ&Lambda0z1x]&ZT,Linkage_name0EwKсڊs)Load_path0I@18 ~(Location0a7cK_H%9)Longident0s `7mɕc$Misc0ob]6>Vê>0Mutable_variable0~emPs&Symbol0ҡ4d,#Tag0\݅}x.Type_immediacy0A^abOhՠ%Types0^Y~# *0zM;FA g?)Unit_info0ڀh%(2Var_within_closure00SSJh6 (Variable0' Gr㠠(Warnings0mJɒkgr