Caml1999I0310Invariant_params=invariant_params_in_recursion@'Flambda5function_declarations@@@'backend,Backend_intf!S@@(Variable#Map!t #Set!t@@@@@@@@@@@ 'middle_end/flambda/invariant_params.mlijm@@3@@7invariant_param_sources@25function_declarations@@@'backend0!S@@.#Map!t7$Pair#Set!t@@@@@@@@@@@.o/rt@@`A@0unused_arguments@_5function_declarations@@@'backend]!S@@[#Set!t@@@@@@@@Pv  Qy z @@B@@6}0Invariant_params0\TP4? 1?(Warnings0zdͦkUe$(Variable0+d2 ޲ՠ2Var_within_closure0GMUu_%T[%Types0lm?ƈ.Type_immediacy0dV^25b)̓ԆSj#Tag0.ΒN1BK@:), &Symbol0SW9粩i%Subst0BYw>*Su}Ck-Stdlib__Uchar0*Ujmyc6]]W.Stdlib__String0I3UK# +Stdlib__Set0.z9FX+Stdlib__Seq05"g1<)b+Stdlib__Map0kZ,ҷ'V.Stdlib__Lexing01'jh,-k4,Stdlib__Lazy0C 4 "$p1tU-Stdlib__Int640X|Gj|}%/Stdlib__Hashtbl04$*uկdD.Stdlib__Format0{hXsHW#ȼ.Stdlib__Either0&]XF.Stdlib__Digest0aI]2t*x4%".Stdlib__Buffer0K ɦb+Z8)#KH"&Stdlib0yӶ~*0Static_exception0 ]8bVwPH3Simple_value_approx0؅MVŖ%Shape0H[DTċwToe@Q6Set_of_closures_origin0M0-+s-zXĩݠ2Set_of_closures_id0!7䭔(o*Projection00 rgi.1eҠ)Primitive0յ_9|br$Path0L%SsN|#Ɣj)Parsetree0`ⰧkRE)Parameter0‘sEB $^+Outcometree0gCtrw 2 T@@ @@@0.--.....@o"@A@@б'backendЙ!S@,Backend_intfWx U jXx U x@@@ \x U b]x U y@@г#Set!t(Variableky z ly z @@@@@ .@@,@@ 1tx U Z @@@8@@ 5; @@@zv  @@B@@@;@1@_@X @@0onnooooo@BZ @A@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Pierre Chambart, OCamlPro E44E4@ H Mark Shinwell and Leo White, Jane Street Europe FF@ H GG@ 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"-g)-nostdlib"-I$boot*-use-prims2runtime/primitives0-strict-sequence*-principal(-absname"-w>+a-4-9-40-41-42-44-45-48-66-70+-warn-error"+a*-bin-annot,-safe-string/-strict-formats"-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"-c 3/home/barsac/ci/builds/workspace/step-by-step-build - @0^+ҢA0@@@/Allocated_const08UYwBkc6@.(Asttypes0'$O~70;U4]{.M5Build_path_prefix_map0xөvĠ8CamlinternalFormatBasics0cEXy*Su}Ck&Symbol0SW9粩i#Tag0.ΒN1BK@:), .Type_immediacy0dV^25b)̓ԆSj%Types0lm?ƈ2Var_within_closure0GMUu_%T[(Variable0+d2 ޲ՠ(Warnings0zdͦkUe$@0\TP4? 1?AC@@@@@@@@@@@@@A@@@@@@P@