Caml1999I0370Invariant_params=invariant_params_in_recursion @'Flambda5function_declarations@@@@@'backend,Backend_intf!S@@@@(Variable#Map!t #Set!t@@@@@@@@@@@ 'middle_end/flambda/invariant_params.mlijm@@8@@@7invariant_param_sources @75function_declarations@@@@@'backend5!S@@@@3#Map!t<$Pair#Set!t@@@@@@@@@@@3o4rt@@jA@@0unused_arguments@i5function_declarations@@@@@'backendg!S@@@@e#Set!t@@@@@@@@Zv  [y z @@B@@@T0Invariant_params0|cR6gJ!(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ᷧ$$Misc0Bpg]?[q)Longident0wP q;ɡ(Location0nBɊOn?7~ؠ)Load_path0,j " nn7ݠ,Linkage_name0tԈK1G&Lambda0x_edT-uq7Internal_variable_names0TbgѹG+L,Identifiable0]/*N %Ident0>ЃzV)j⠠*Freshening0xW("-9wVԠ*Format_doc0uy@GmWUࠠ'Flambda0VJ͟)Export_id0CJ9DןRa7ݷ$E#Env0S B2)Debuginfo0_ |PooGq*Data_types0v\3,Svh0Compilation_unit0Dl ]wN*Cmi_format0`M{?w}@.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&NvGC0Invariant_params-ocaml.warning 'middle_end/flambda/invariant_params.mliQQ@2+a-4-9-30-40-41-42 QQ@@QQ@@@@@@QQ@3@@@@@@#intA;@@#intA@@@@@&_none_@@A@A@$charB;@@$charA@@@@@ @A@&stringQ;@@&stringA@@@@@@@@%bytesC;@@%bytesA@@@@@@@@%floatD;@@%floatA@@@@@@@@$boolE;@@%falsec@@%@$trued@@+@@@A@@@@@,@A@$unitF;@@"()e@@6@@@A@@@@@7@A@ #exnG;@@@A@@@@@;@@@#effH;@@O@A@A@@@@@@D@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@T@@@%arrayJ;@@R@A%arrayA@@@@@@_@@@ $listK;@@S@A"[]f@@l@"::g@@@T@@y@ @@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\#$@@@A@'FailureY#,@'@@A@0Invalid_argumentX#5@0@@A $#@-Match_failureV#>@@=@9@;@@a@@A5!4!@)Not_foundZ#O@@@A&=)<)@-Out_of_memoryW#W@@@A.E1D1@.Stack_overflow^#_@@@A6M9L9@.Sys_blocked_io_#g@@@A>UATA@)Sys_error[#o@j@@AG^J]J@:Undefined_recursive_modulea#x@@w@s@u@@h@@AXo[n[@:Continuation_already_takenb#@@@A`wcvc@&Stdlib@A@=invariant_params_in_recursionڠjj@б@г'Flambda5function_declarations'Flambdakk@ kk@@@@@@ Q @@б'backendЙ,Backend_intf!S@,Backend_intfll@ ll@@@@ RӰll@@г(Variable#Map!t(Variablemm@ m m @@m m@ @г#Set!t(Variablemm@ mm@@"m#m@ @@@@@@@@=@@@'@@aL@@ @@3l-@@@o@@ @@"w2@@@;j5@@G@@@7@@(7invariant_param_sourcesFoGo+@б@г5function_declarations'FlambdaUp,1Vp,8@ Yp,9Zp,N@@@@@@3IHHIIIII@H(@A @@б'backendЙ!S@,Backend_intfrqOdsqOp@ vqOqwqOr@@@@}qO\~qOs@@г#Map!t(Variablertrt@ rtrt@@rtrt@ @г$Pair#Set!t(Variablertyrt@rtrt@@rtrt@ @rtrt@@@$@@@c@@@D@@@h0@@fS@@ @@mqOT6@@@v@@ @@s~;@@@o>@@A@@@@@y0unused_argumentsv  !v  1@б@г/5function_declarations'Flambdaw 2 7w 2 >@ w 2 ?w 2 T@@@@@@3@(@A @@б'backendЙ/!S@,Backend_intf x U j x U v@ x U wx U x@@@@x U bx U y@@г-#Set!t(Variable(y z )y z @ ,y z -y z @@1y z 2y z @ @@@@@>@@<)@@@@C=x U Z @@@L@@ @@IT@@@Ev  @@QB@@@@O@@ y@r @@387788888@Vt @A@ H************************************************************************TA@@UA@L@ H ZBMM[BM@ H OCaml `CaC@ H fDgD3@ H Pierre Chambart, OCamlPro lE44mE4@ H Mark Shinwell and Leo White, Jane Street Europe rFsF@ H xGyG@ H Copyright 2013--2016 OCamlPro SAS ~HHg@ H Copyright 2014--2016 Jane Street Group LLC IhhIh@ H JJ@ H All rights reserved. This file is distributed under the terms of KKN@ H the GNU Lesser General Public License version 2.1, with the LOOLO@ H special exception on linking described in the file LICENSE. MM@ H NN5@ H************************************************************************O66O6@  [invariant_params_in_recursion] calculates the set of parameters whose values are known not to change during the execution of a recursive function. As such, occurrences of the parameters may always be replaced by the corresponding values. For example, [x] would be in [invariant_params] for both of the following functions: let rec f x y = (f x y) + (f x (y+1)) let rec f x l = List.iter (f x) l For invariant parameters it also computes the set of parameters of functions in the set of closures that are always aliased to it. For example in the set of closures: let rec f x y = (f x y) + (f x (y+1)) + g x and g z = z + 1 The map of aliases is x -> { x; z } Si@ { CR-soon mshinwell: think about whether this function should be in this file. Should it be called "unused_parameters"? tu @@-./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 ;C:\builds\workspace\main\flambda\false\label\ocaml-mingw-32 >10/.-,+*)('&%$#"! @@0^+ҢA3@@@/Allocated_const0/vVǟx(Asttypes0eT$BbRM dc?0󋚕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_format0`M{?w}@0Compilation_unit0Dl ]wN*Data_types0v\3,Svh)Debuginfo0_ |PooGq#Env0S B2)Export_id0CJ9DןRa7ݷ$E0VJ͟*Format_doc0uy@GmWUࠠ*Freshening0xW("-9wVԠ%Ident0>ЃzV)j⠠,Identifiable0]/*N 7Internal_variable_names0TbgѹG+L0|cR6gJ!&Lambda0x_edT-uq,Linkage_name0tԈK1G)Load_path0,j " nn7ݠ(Location0nBɊOn?7~ؠ)Longident0wP q;ɡ$Misc0Bpg]?[q0Mutable_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__Format00FClW/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 )Unit_info0'T Χ@aR2Var_within_closure0``ݗXFR⠠(Variable0?l猵eY(Warnings0Ef{&@0|cR6gJ!ACC@@@@@ @(@@@@@@.@@@@@P@@