Caml1999T037W`XC0Invariant_params-ocaml.warning &middle_end/flambda/invariant_params.mlQQ@5+a-4-9-30-40-41-42-66 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@@Р?Int_replace_polymorphic_compare?Int_replace_polymorphic_compareRR@@ 3@@@@@@3@@@R@@ @A+!tAjj@@;@@#Top@@kk@@AA+Implication(Variable$Pair#Set!t@@@@@ll@@BA@@A@@@@@j@@@@@A@###k!@ @@@$@#  ll@@г"(Variable l l@)ll@@-ll@ @1l/@0@@>3@`W;@@@A@@@@@2@@@0@@5@@@@7@@A@3@@36@3      @e@@@ఠ&_print],n-n @9CA@@@&Stdlib&Format)formatter@@@"B@@@@@B@$unitF@@@A;&Format8CamlinternalFormatBasics'format6!a@!b@!c@!d@!e@!f@@@@"s@'#fmt$ @@@"q&stringQ@@@"r@B@@A@A*@@@r@ภ(Open_boxq;(Open_box%!a@ !b@ !c@ !d@ !e@ !f@ @@@!+@ "@@@!,@AA@BAAH Q SI  @@@O@ภ&Š&Format"ภ/Π$@@@@@#F@#F@#@ภC@@G@#E@#@@G@@@#F@#F@##@@ @[G@#i=234G@#m+G@#n@@@#wF@#2@@@̠jG@#WJ?@CE@#F@#TF@#M9@7Implication: @[%a@]$@$@i@@@#?F@#F@#E@@+*@@~u_@@@"F@#;N@@డ$Pair#Set%print(Variablerr@rr@@rr@ @rr@@@&Stdlib&Format)formatter@@@@@@@$unitF@@@@@@@@7middle_end/variable.mliz ' 5z ' W@@,IdentifiableN@0!@@E@#@@ఐ$argsr|@}@@F@#@@@@@@A%paramİn@@@A@B@$@A@@@@ఠ#topŠtt@FA@@@#Map!t@@@/D@')@@@/B@$ @#key@@@/fB@$@@@/dB@$@@$B@$ @@$ B@$ 3        @@@@@@࣠@(relationA1t2t@>GA@@23@?9t:u@@@@@  @@!pAEtFt@RHA@@3321122222@!I@@@@@@@@డt$Pair#Map#add(Variablecudu@guhu@@lumu@ @quru@@@_@@@%@!a@%@} @@@% @@@%@@%@@%@@%@@+Stdlib__MapF@*@@@w@@@'+@@@@@'*@@@'(@@''@@'&@@'%3@Vb@Y@Z@@@@ఐi!puu@ @@@@ภ#Topuu@D@@@E@/@@ఐ(relationu@|@@*@@f@@+@A@B@/@A@@@@ఠ'impliesww@IA@@@ݠ@@@0B@/@@@/B@/@#elt@@@0B@/@@@@0B@/B@/@@/B@/@@/B@/@@/B@/3@ @@@@@࣠@(relationAww @JA@@33@@wA ; I@@@@@  @@$fromA#w $w @0KA@@83@!J@@@@@@@@#to_A4w 5w @ALA@@>3!  !!!!!@L@@@@@@@@డe$Pair#Map$find(VariableTx  Ux  @Xx  Yx  "@@]x  #^x  &@ @bx  'cx  +@@@P@@@&@h!a@%G@@@&@@&@@&@@U@#@@@a@@@/@y@@@/@@/@@/3kjjkkkkk@KW@N@O@@@@ఐ^#to_x  ,x  /@ @@@@ఐ(relationx  0x  8@u@@@@L@@@Ġ#Topy > By > E@7@@@@3@+@@@@@@@ఐ(relationy > Iy > Q@@@ @Ġ+Implicationz R Vz R a@ఠ#setz R bz R e@MA@@@@@/P@@@@@Q@@Q@@@డ$Pair#Map#add(Variable{ i m{ i u@{ i v{ i z@@{ i {{ i ~@ @{ i { i @@@@@@@@0@B@0.G@0@@@@0 @@@0@@0@@0@@03@IB@C@D@@@@ఐꠐ#to_ { i  { i @@@$@@ภ+Implication '|   (|  @JడP$Pair#Set#add(Variable ?|   @|  @ C|   D|  @@ H|   I|  @ @ M|   N|  @@@b@@@@5@@@8@@@@@@@@@+Stdlib__SetF@"@@@r@@@0:@E@@@09H@@@08@@07@@06`@@ఐX$from x|   y|  @@@@m@@ఐ#set |   |  @w@@i@@@0MI@0]I@0\@@ |   |  @@@@@00@0^I@0L@@ |   |  @@H@0/@@ఐ(relation }   }  @@@@@@@@Ġ)Not_found ~   ~  @;)Not_found#exnG@@@@@@ A@A&_none_@@A@@I@@@@@@@@/H@ ~  @@J@@@డ$Pair#Map#add(Variable      @      @@      @ @      @@~@@@@@@0@G@0}@@@@0~ @@@0|@@0{@@0z@@0y@@ఐߠ#to_      @@@@@ภ+Implication @   @  @?డE$Pair#Set)singleton(Variable 4@   5@  @ 8@  ! 9@  %@@ =@  & >@  )@ @ B@  * C@  3@@@W@@@(@@@@@@~@G@ @@@a@@@02@@@0@@0@@ఐB$from b@  4 c@  8@*@@v@@ f@   g@  9@@@@@0@0I@0@@ p@   q@  :@@H@0@@ఐr(relation ~A ; Ag@Vh@@@@i@@@@@A x  k@@@ulA@B@0s@A@p@po@@ఠ2transitive_closure C K O C K a@ NA@@@[@@@2B@1Q@@@1mB@0f@@@2C@2@@@2B@0@@0B@03        @@@@@@࣠@%stateA C K b C K g@ OA@@(3        @5 C K K ^@@@@@  @@Aఠ$loop G   G  !@ PA@@@ =@@@1D@1 @@@1D@0@ 4@@@1]D@2@@@2D@0@@@@1D@1@@@1ED@1@@1@@1@@13        @>Jh@A@B@@@࣠@)candidateA G  " G  +@ QA@@73        @C@>@4@+&@@1E@0@@0E@0@@0E@0@I@J@@@@@@(frontierA *G  , +G  4@ 7RA@@F3        @*W@!@"@@@@@@&resultA ;G  5 <G  ;@ HSA@@J3 ( ' ' ( ( ( ( (@Z@@@@@@@@@ఐG)candidate QH > I RH > R@#@@z3 = < < = = = = =@"b@@@@@@ఐ9(frontier `H > T aH > \@!@@{@@ dH > H eH > ]@@@@@@1@@Ġ"[] zI c j {I c l@;  ڐ@@U@@@@AA@A ?@@ @@@@@13 l k k l l l l l@/@@@@Ġ I c n I c p@@@@@D@2,D@1!@1@@ I c i I c q@@@@@@1#@ @@@@@1$@@@ภ+Implication I c u I c @ˠఐz&result I c  I c @^@@2@@@@3@@ĠJ J   J  @I@@@@@1&3        @t@@@@Ġ":: J   J  @; "W@ B@AA@A @@ ఠ(frontier J   @ TA@@D@1-@ఠ"fs J  @ UA@@ 5@@@1/'@@@@@b@1'*@@ J   J  @@@3@ @@103@ @@9@@@119@@@డ )$Pair#Map$find(Variable L   L  @ L   L  @@ !L   "L  @ @ &L   'L  @@İ@@@@@@1S@,@@@1R@@1P@@1O3        @`Z@[@\UO@P@Q@@@@ఐh(frontier DL   EL  @@@h@@ఐ%state QL   RL  @R@@@@=@@ @Ġ)Not_found _M  - `M  6@@@@@ L@@@1|3 N M M N N N N N@0@@@ gM  #@@@@@ఐ$loop qM  : rM  >@`@@@@@@@1@@1@@1@@ภ  M  ? M  A@@@@D@1"@@ఐ"fs M  B M  D@Z@@D@11@@ఐh&result M  E M  K@L@@>@@3@@?@Ġ#Top N L U N L X@ ;@@@@L@@L@@@ภ#Top N L \ N L _@ D@@@U@Ġ+Implication O ` i O ` t@ఠ)candidate  O ` u O ` ~@ YA@@ @@@1@@@@@6@@6@@@ఐ $loop P   P  @Ͱ@@@ @@@@1@@1@@13        @ @@@@@@డ $Pair#Set(elements(Variable P   P  @ P   P  @@ P   P  @ @ P   P  @@@@@@$listK.@@@@@@@@@S@N@#@@@ @@@1<@@@1@@@1@@1J@@ఐn)candidate ;P   <P  @T@@ @@@1M@1M@1^@@ FP   GP  @@nD@1c@@ఐl"fs TP   UP  @@@D@1r@@ఐ+&result cP   dP  @@@q@@@@m@@@A hL   iP  @@p@@Ġ wQ   xQ  @ఠ)candidate Q   @ VA @@D@180@ఠ"cs Q  @ WA@@ ؠ@@@1:>@@@@@@13A@@ఠ(frontier  Q   Q  @ XA@@@14N@@ Q   Q  @@@@ @@1;W@ @@@@@1<]@@@@ఠ'result'  R   R  @ ZA@@ @@@1J@13        @sLF@G@HB<@=@>1*@+@,@@@డ $Pair#Set#add(Variable R   R  @ R   R  @@ R   R  @ @ R   R  @@@@@@@@1@ @@@1 @@@1@@1@@1;@@ఐ)candidate R   R  @C@@H@@ఐޠ&resultR  R  @°@@$U@@:@@YV@A@R  @@డ }"!='S # 4(S # 6@@!a@@$boolE@@@C@@B@@A&%noteqBA @@@@*stdlib.mli@@ [@@@@ %@@@1I@1@@@@1@@1@@1398899999@@@@@@@ఐ'result']S # ,^S # 3@ @@@@ఐ2&resultjS # 7kS # =@@@x@@@@@@@2J@1$@ఐ$loop}U  ~U  @l@@@@@@@2 @@2 @@2 6@@ఐ"csU  U  @ɰ@@D@2E@@ภ"::U  U  @͠ఐ()candidateU  U  @@@([@ఐ(frontierU  U  @@@f@@U  U  @@D@2k@@ఐ 'result'U  U  @u@@ @@@2-{@@O@@|@ఐ$loopW  W  @Ű@@@@@@@25@@24@@23@@ఐ^"csW  W  @"@@D@2?@@ఐ[(frontierW  W  @0@@Z@@ఐ͠&resultW  W  @@@@@3@@@ S # )@@@@@H@@@A H > B@@@ A@@9@-@"@@2@@2@@2D@2@@@G  @@డ ?$Pair#Map#map(Variable.Y  /Y  @2Y  3Y  @@7Y  8Y  @ @<Y  =Y @@@@!a@%!b@%@@&X@I @@@&WM @@@&V@@&U@@&T@@]@*@@@@C@2@@2@[@@@2_@@@2@@2@@23QPPQQQQQ@W@@@@࣠@#set AwZxZ@[A@@3dccddddd@j@@@@@@ఐ#set[$['@.@@@@/3tssttttt@{@@@Ġ#Top\-8\-;@ $@@@@>3@@@@@?@@@ภ#Top\-?\-B@ .@@@ @Ġ+Implication]CN]CY@ Ѡఠ#set ]CZ]C]@\A@@ @@@23@@@@@c4@@c4@@@ఐ$loop]Ca]Ce@@@@@@@2@@@2@ @@@2@@@2@ @@@2 @@@2@@2@@2@@23@[4-@.@/@@@@ภw]Cf]Ch@v@@@@@@2@@@2H@2@@డ%$Pair#Set(elements(Variable]Cj]Cr@]Cs]Cw@@]Cx]C{@ @"]C|#]C@@@@@ @@@3=@@@3@@@2@@2M@@ఐ#set<]C=]C@W@@ @@@3 I@3I@3a@@G]CiH]C@@ 8@@@2@@@2H@3I@3o@@ఐ#set^]C_]C@y@@ B@@@2H@30H@3/@@ @@@@@Aj[ @@@lZ m]C@@@@@2D@3=D@3<@@ఐà%state~^@~@@@@S@@@j@@@A@B@3X@A@@@֠@ఠ7function_variable_aliaspp@]A@@@'Flambda5function_declarations@@@71B@3Z'backend,Backend_intf!S@@B}B@75     @@@QcD@M@@@QB@76@@77B@3[@@3\B@3Y3@6/@0@1@@@࣠@.function_declsTA@qq@@7@@@723@Ip@@@@  @^ACгF'Flambdaqq@Kqq1@@@U@@@7/ @@qq2@@@\"@@@SSUAWr38r3?@ _A@@[3@0=5@8@*@@@@r37@@@ఠ(fun_varsVsBHsBP@!`A@@ a#Set$Make !T!t@@@=E@7:3@#.@&@'@@@డN#Map$keys(Variable:sBS;sB[@ >sB\?sB_@@CsB`DsBd@ @@!a@7_@@@:.7@@@:-@@:,@6utils/identifiable.mlimm@@ ]@ @@@'Flambda4function_declaration@@@BdE@:O@@@:NP@@@:M@@:LG@@ఐ.function_declsysBezsBs@u@@5function_declarations@@@Be@Bb]@$funssBtsBx@3$funs @@@5(Variable#Map!t7@@@5@@@5@@C3/is_classic_mode$boolE@@@5@@@ @@>middle_end/flambda/flambda.mli4444@@DR@32set_of_closures_id!2Set_of_closures_id!t@@@5@@A@@5254525^@@RS@36set_of_closures_origin/6Set_of_closures_origin!t@@@5@@B&@@"66"666@@`T@=@@!'7(7*"'7(7U@@dU@RC@@=m@@@Bc@@H@@@A@sBDJ@@@ఠ3symbols_to_fun_varsIt|t|@aA@@&Symbol#Map!t2@@@MJ@H@@@ME@By3@@@@@@ 'BackendMGuu@ bA@Цఐ'backend u u@@Йg@hf,Backend_intfuu@o"u#u@@z@@B|3@6@@ @@A@@@@B@~1u2u@ @@4u@@డ[#Set$fold(VariableGvHv@ KvLv@@PvQv@ @@@@@@C@#acc@C@@C@@C@9@@@C@  @@C@@C@@C@ll@@ \@'@@@@@@@Do@G@Dk@@Dn@@Dm@@@@Dl@  @@Dj@@Di@@Dh3ihhiiiii@@U@Q@@@@࣠@'fun_varAvv@cA@@@@@D3@@@@@ @@3symbols_to_fun_varsAvv @dA@@13@)@@@D@@@@@@  @@@ఠ*closure_idw w #@eA@@*Closure_id!t@@@DK@D3@!-T@$@%@@@డ*Closure_id$wrap*Closure_idw &w 0@ w 1w 5@@@(Variable!t@@@D,@@@D@@D@ 1middle_end/flambda/base_types/closure_element.mliUU@@/Closure_element@@@@@@@@D;@@@D@@D6@@ఐy'fun_varw 6 w =@`@@O@@@EF@@5@@OG@A@w @@@ఠ&symbolxAMxAS@(fA@@&Symbol!t@@@EK@E63@bun@o@p@@@డ7.closure_symbol'Backend9xAV:xA]@ =xA^>xAl@@@*Closure_id!t@@@ER*@@@EQ@@EP@;middle_end/backend_intf.mliaa@@@,Backend_intfC@@@@@@@EX9@@@EW@@EV4@@ఐ*closure_idgxAmhxAw@>@@+@@@EL@EL@EH@@9 @@QI@A@sxAI @@డ&Symbol#Map#add&Symboly{y{@ y{y{@@y{y{@ @@#key@@@G@!a@Go@ @@@G~Š @@@G}@@G|@@G{@@Gz@6utils/identifiable.mlimm@@+Stdlib__MapF@+!@@@@@@H@@٠@@@Hݠ@@@H@@H@@H@@H3@@@@@@@ఐ&symboly{y{@ @@?@@@MK@M@@ఐS'fun_vary{y{@:@@"@@ఐN3symbols_to_fun_varsy{y{@'@@{/@@l@@ @@@Mj4@@@@ @@1@vy{@@@F@@@D@@@D@@D~H@MH@Mn@@ఐ(fun_varszz@@@@@@M@@డ#Map%empty&Symbol){*{@ -{.{@@2{3{@ @T!a@Gs@@@Gy@@E@ @@^WG@M@@@M@@@@@Hu@@W@A@Jt|~@@@ఠ0fun_var_bindingsOU}V}@bgA@@$#ref@@@ME@M@@@ME@M3POOPPPPP@v@@@@@డ#refs}t}@@!a@!@@@g@@f,%makemutableAAH@@@FhhGh@@L@@@@+0.@@@M@@M(@@డ#Map%empty(Variable}}@ }} @@} }@ @!a@8@@@8@b@ ,E@ @@VQ@@F@@^R@A@}@@ డ#Map$iter(Variable~~@ ~~"@@~#~'@ @@@* @@@9r@!a@8;$unitF@@@9q@@9p@@9o@<@@@9n @@@9m@@9l@@9k@@ o[@-#@@@@ @@@N @k4function_declaration@@@N*E@N#@@@N@@N@@N@\@@@N @@@N@@N@@N3@@@@@@@࣠@%paramyA@'~-(~.@@J@@@N"3@@@@@@@-function_declPA@7~18~>@@3@@@N+@  @IhA9 г<'FlambdaJ~AK~H@CN~IO~]@@@K@@@N(( @@V~/W~_@@@R,@@@@డ1Flambda_iterators (iter_all_toplevel_immutable_let_bindings1Flambda_iteratorsicijcz@ mc{nc@@@'Flambda!t@@@O!f@(Variable!t@@@O@%named@@@O$unitF@@@O@@O@@O@@@O@@O@@O@ (middle_end/flambda/flambda_iterators.mlig 4 4j  @@1Flambda_iteratorsL@94@@@1@@@P,@*@@@P@%@@@P"@@@P@@P@@P@@@P@@P@@P3@@@~@@@@ఐ-function_decl@@@l@@@P@P3@@@@$body@3$bodyx@@@5{!t@@@5@@B/3.closure_origin .Closure_origin!t@@@5@@@ @@G-88H-884@@V@3¶ms$listK)Parameter!t@@@5@@@5@@A @@\.8587].858Q@@W@.3.free_variables.y#Set!t@@@5@@C.@@j288k288@@Y@3,free_symbols<&Symbol#Set!t@@@5@@D>@@z699{699@@Z@3$stubL@@@5@@EH@@::::::@@[@3#dbgV)Debuginfo!t@@@5@@FV@@?;;?;;@@\@3&inlined&Lambda0inline_attribute@@@5@@Gd@@A<<A<<@@@]@3*specialiser4specialise_attribute@@@5@@Hp@@CYA@B@Q`@A@]@]\@t@ఠ1analyse_functionszAB/@NmA@@'backend@@R+B@Q.param_to_param&caller@@@_)B@c[*caller_arg@@@^B@c^&callee@@@^B@ca*callee_arg(Variable!t@@@cjB@cd@L@@@jB@^@@@cuB@cg @@@cB@chA@ciB@ceA@cfB@cbA@ccB@c_A@c`B@c\A@c]B@Q1anything_to_param&callee;B@c*callee_arg8@@@cB@c@3@@@cB@c.B@cA@cB@cA@cB@cA@cB@Q1param_to_anywhere&caller@@@iB@i*caller_argb!t@@@iB@i@`@@@iB@if@@@iB@iA@iB@iA@iB@iA@iB@Q@ e5function_declarations@@@RB@R@@@j@@@jB@R@@RB@Q@@QB@Q@@QB@Q@@QB@Q@@QB@Q3@ N  }@ ~@ @@@࣠͠|AѰ18@)nA@@3      @䐰$%'x'@@@@@'0 @֠}Aڰ0:1H@=oA@@3@ @@@@@@89@~AAIPBIa@NpA@@3.--.....@@@@@@@IIO@ARIcSIt@_qA@@3?>>?????@@@@@@@ZIb@@%declsA@du|eu@@f@@@R3RQQRRRRR@@@@@@  @yrAo гr'Flambdazu{u@y~uu@@@@@@R @@u{u@@@@@@@@ఠ7function_variable_alias@sA@@  @@@R*@@@R)H@R 3@9F>@A@6@@@ఐ 7function_variable_alias@@@@ @@@R  @@R  @@@R@@@R@@R@@R  @@ఐj%decls@*@@ 7@@@R,I@R.I@R-4@ 0ఐŠ'backend@@@A@@6@@IB@A@@@@ఠ9param_indexes_by_fun_vars@tA@@ @%arrayJ@@@UJ@U@@@UH@R;@@@RTH@R63@gyr@s@t@@@డ/#Map#map(Variable@  !@@$"%%@ @@@ @8+ @8)@@9@ {@@@9~  @@@9}@@9|@@9{@ @ @@@@ 4function_declaration@@@RZH@R=M@@R>@  @@@R< V@@@R:@@R9@@R8387788888@H@@@@࣠@$declA@^,_0@@!@@@R[\@  @puA' г*'Flambdaq3r:@1u;vO@@@9@@@RXt @@}+~P@@@@x@@@@డ%Array'of_listTZT_@ T`Tg@@@$listK!a@Sn@@@T/@@@T.@@T-@)array.mli@@-Stdlib__ArrayP@ @@@@@@U@@@U @@U 3@c[@^@V@@@@డ)Parameter$List$vars)ParameterTiTr@ TsTw@@TxT|@ @@$listK)Parameter!t@@@Uw@@@Uvt@@@Uu@@@Ut@@Us@ middle_end/flambda/parameter.mliss)@@K@,"@@@@@@U|@@@U{@@@Uz@@@Uy@@UxU@@ఐ$declT}T@a@@ @@@U@Ui@¶ms%T&T@7@@LI@@@U@@@UL@UL@U{@@4Th5T@@=@@@UK@UL@U@@ @@E@@&AT@@@ P@@RVI@UI@UA@@ఐ%declsTU@@@ @@@U@U @$funs`a@ ٰ@@ ՠ)I@U@@@U@@O @@uc@A@k @@@ఠ/find_callee_argˠvw@vA@@&callee@@@UH@U*callee_pos#intA@@@V=H@U٠@@@V@H@V@@@VH@U@@UH@U@@UH@U3@@@@@@࣠((A,@wA@@03@?@@@@@ @11A5@xA@@93@ G@@@@@@@@డ#Map$find(Variable@ @@@ @@ @@@9C@ <@8n@@@9B@@9A@@9@@ @@@@@@@U@ I @@@U@@@UK@U@@@U @@U@@U3@HS@K@L@@@@ఐn&callee@T@@@@ఐ69param_indexes_by_fun_vars%& @@@ s(@@@U!@@P@@,"@Ġ)Not_found78(@@@@@$@@@U3&%%&&&&&@2@@@?@@F@@@U@@@U @@@ภ$NoneM,N0@;@@W@@@@AA@A@@@@@@ఠ#arrϠ_LR`LU@lyA@@i@@@U@@@U_@@p@@@V@@@Uf@@@డ!<|}@@#intA@@@@@@@$boolE@@@@@@@@ )utils/int_replace_polymorphic_compare.mliCBBCBb@@?Int_replace_polymorphic_compareB@@@@@@@V @@@@V @@@V @@V @@V3@NG@H@I@@@@ఐ*callee_pos@@@,@@డ%Array&length@ @@@נ!a@S@@@SM@@@S@@Sא-%array_lengthAA @@@M@VAM@V?@@ఐ*callee_posz{@o@@@@LK@@*@@`L@@H@V,@@@V.@ภ$None@=@@@L@VF@@@@@@A@@V@A@H@VK@A@@@ఠ2escaping_functionsР&@zA@@#Tbl!t:@@@^*G@W@@@]VH@VL3@C<@=@>@@@డ#Tbl&create(Variable)1@ 25@@6<@ @@#intA@@@V6!a@V@@@V@@V@ n n@@/Stdlib__Hashtble@#@@@@@@WIE@@@W@@W@@@M=?@@*@@@]WI@]YI@]XP@@= @@^Q@A@ @@@ఠ1escaping_functionCICZ@{A@@@ ;@@@]wH@]a@@@^,H@]b@@]cH@]`3        @p@@@@@࣠@'fun_varA0C[1Cb@=|A@@3@)8CE9.f@@@@@  @@@ఠ'fun_varFemGet@S}A@@2J@]f354455555@%7@@@@@డv#Map$find(Variablebwcw@ fwgw@@kwlw@ @ @@@ @@@]m@@@@]K@]k@@@]l@@]j@@]i3hgghhhhh@3@@@@ఐ]'fun_varww@>@@u@@ఐ7function_variable_aliasww@@@"@@@]@@=@@& @Ġ)Not_found@@@@@@@@]c@@@@@@]h@@@ఐ'fun_var@o@@tr@ఠ'fun_var@~A@@@@@]P@@@@@]S@@@ఐ'fun_var@@@@@3@@@@@@Aw}@@@A@ei @@డ #Map#mem(Variable @ @@ @ @@ &@@@9@U!a@7@@@9$boolE@@@9@@9@@9@@e@$@@@ =@@@]@l@@@]I@]@@@]@@@]@@]@@]3        @@@@@@@ఐ'fun_var : ;"@ @@@@ఐ蠐%decls I# J(@@@@@@]@]$@$funs U) V-@ΰ@@ʠ5@@@]/@@g@@@@@]J@]5@డ#Tbl#add(Variable s.7 t.?@  w.@ x.C@@ |.D }.G@ @@ܠ!a@V@@@W @#key@@@W @$unitF@@@W @@W@@W@@W@@i@(@@@G@]@@@]@@@@]@ @@@]@@]@@]@@]@@ఐ2escaping_functions .H .Z@@@@@@^@@ఐ'fun_var .[ .b@@@@@ภ a .c .e@ `@@@(J@^+@@e@@J@]@@  @@@@@@A@H@^.@A@@@ఠ.used_variables lr l@ A@@J @@@^G@^3@@@^FH@^/3        @@@@@@డ!#Tbl&create(Variable! l!l@ !l!l@@!l!l@ @F @@@F@@@^4y/@@@^2@@^1*@@j!*l!+l@@Z@@@^GI@^II@^H:@@' @@D;@A@!5ln @@@ఠ-used_variable!@!A@!M@A@@@@@@^kH@^Q@@@^jH@^R@@^SH@^P3!;!:!:!;!;!;!;!;@Zng@h@i@@@࣠@#varA!`!a@!mAA@@3!M!L!L!M!M!M!M!M@)!h!i@@@@@  @@డ#Tbl#add(Variable!}!~@ !!@@!!@ @  @@@G@^[@@@^]@@@@^\@ @@@^Z@@^Y@@^X@@^W3!!!!!!!!@8DV@;@<@@@@ఐ.used_variables!!@V@@@@@^s@@ఐ\#var!!@@@t!@@ภ S!\@ Q@]@@J@^-@@L`@@z.@jaA@H@^h@A@e@@ఠ(relation!!@!BA@@ ܠT@@@^H@^@@@^H@^3!!!!!!!!@@@@@@డ H#ref!!@ @@@ @@@^@@^@@డ "$Pair#Map%empty(Variable""@""@@""@ @""  @@ u@%@@@%@X@ r @@HC@@8 @@ND@A@"+ @@@ఠ.check_argument"6"7@"CCA@@&callerH@^&calleeH@^*callee_pos@@@^H@^*caller_argH@^@@@_H@^@@^H@^@@^H@^@@^H@^@@^H@^3"K"J"J"K"K"K"K"K@}@@@@@࣠++A/"o"p@"|DA@@33"\"["["\"\"\"\"\@B"w"x@@@@@"z @77A;""@"EA@@?3"p"o"o"p"p"p"p"p@ J@@@@@@"@@@AD""@"FA@@H3""""""""@S@@@@@@"@FFAJ""@"GA@@N3""""""""@\@@@@@@"@@ ఐ1escaping_function""@@@@ @@@^ @@@^@@^3""""""""@(m@ @!@@@@ఐ/*caller_arg""@ @@z@@@@ @@@^M@^@ఐp/find_callee_arg""@3@@m @@@^gc@@@^^ w@@@^@@@^@@^@@^5@~ఐ&callee##@l@@B@ఐ*callee_pos##&@h@@O@@/@@ @@@^@@@^W@Ġ$None#&,2#',6@@@@@ @@@^@@@^3########@k@@@ @ @@@^@@@^@@@ఐ-used_variable#A,:#B,G@[@@@@@@_@@@^@@^@@ఐ*caller_arg#V,H#W,R@@@)@@@@*@Ġ$Some#dnt#enx@Eఠ*callee_argǠ#mny#nn@#zHA@@ @@@^@@@@@ @@@^@@@^@@ @@@^@@@^@@@డ!#Map$find(Variable##@ ##@@##@ @ @@@@@@_@N@@@_8O@_@@@_@@_@@_3########@LE@F@G@@@@ఐS&caller##@9@@@@ఐ n%decls##@ .@@V@@@_9@_6$@$funs##@T@@P2@@@_7/@@M@@60@Ġ)Not_found##@7@@@@"@@@_P3########@@@@@#@@@@@_Q@@@ ภ%false$$@;##@@@M@@@@B@@A#@@#@ @@@@@_b@$ @@@ঠ¶ms$$A-ఠȠ@$-IA@1.@@@_Y@@@_Xw@@@$+$,@@@@@_[Q@_Z@@@@@_\@@@@ఠ,new_relationɠ$?$@@$LJA@@ B@_c3$-$,$,$-$-$-$-$-@'$@&@%@@@డ"$List&exists$V$W@ $Z$[@@@@!a@`o$boolE@@@b6@@b5@$listK@@@b4@@@b3@@b2@@b1@(list.mli$$$$@@,Stdlib__Liste@*%@@@@@@@cBQ@c#@@@c@@c@  @@@c @@@c @@c @@c 3$~$}$}$~$~$~$~$~@Q@@@@࣠@%param A$$@$KA@@$d@@@@డ"%equal(Variable$$@ $$@@@!t@@@A@@@@@$boolE@@@?@@>@@=@~jcmjc@@`@ @@@@@@c)@@@@c(@@@c'@@c&@@c%3$$$$$$$$@Ic@@@A@@@@డ +#var)Parameter$$@ $$@@@ @@@UI #@@@UH@@UG@ \ \@@ C@@@@ (@@@c; 0@@@c:@@c90@@ఐ}%param%%@:@@=@@%"%#@@e@@@cDU@cAE@@ఐ*caller_arg%3%4@n@@R@@@@@@@cPT@c3X@%=%>@@@@@@c@@cR@cTR@cR@@ఐ/¶ms%R%S@@@@@@cR@cXR@cV@@ @@@@@cYR@c@ఐ >.param_to_param%l!%m/@ '@@ +@ ఐ  %x1%y7@@@;7@ ఐ⠐ %9%C@@@,C@ ఐ %E%K@@@KO@ ఐ0 %M%W@@@ [@@డ$ V X%X%Y@ U@@@T 'R@cm@@@cn@@clq@@ఐ預(relation%a@\@@j@@@csS@cvS@ct@@  @@@@_ @@ 5@ ఐ-used_variable%w%w@@@@P@@@c{L@@@cz@@cy@@ఐI*caller_arg%w%w@'@@@@@@ @@@cR@c@ఐ 1anything_to_param%%@ @@ Z@ Xఐ ]& & @r@@@ \ఐ a&&@c@@ b@@డ${ Р Ұ&$&%@ ϰ@@@Π nR@c@@@c@@c@@ఐc(relation&9@ְ@@@@@cS@cS@c@@  @@@@G @@ @&Fbq&G@@ @&I@@ @A@&K@@డ$&T&U@@@@ P@c@@@c@@@@c@@c@@c3&M&L&L&M&M&M&M&M@!+$@%@&@@@@ఐ(relation&q&r@@@@@@cQ@cQ@c@@ఐG,new_relation&@!@@E$@@@@,Q@c'@A@@/H@@@A&@@1@@@A&@@3`@@@4a@A@XH@c!@A@@@ఠ%arity &&#@&LA@@&callee@@@cH@c%@@@dH@c@@cH@c3&&&&&&&&@Q{@|@}@@@࣠ A&%&+@&MA@@3&&&&&&&&@*&&@@@@@&$ @@డ$#Map$find(Variable&.8&.@@ &.A&.D@@&.E&.I@ @  @@@@@@c@>@@@cJ@c@@@c@@c@@c3&&&&&&&&@:EW@=@>@@@@ఐL&callee' .J' .P@ @@d@@ఐ %decls'.Q'.V@ w@@@@@c@c$@$funs'$.W'%.[@@@2@@@c/@@M@@60@Ġ)Not_found'6aq'7az@@@@@&#@@@d3'%'$'$'%'%'%'%'%@@@@@'>ag@@@@@d@@@@'Fa~'Ga@@ @ఠ$func 'R'S@'_NA@@@@@d]@@@@@d`@@@డ-Flambda_utils.function_arity-Flambda_utils'k'l@ 'o'p@@@'Flambda4function_declaration@@@d#intA@@@d@@d@ $middle_end/flambda/flambda_utils.mlif88f8p@@-Flambda_utilsC@@@@@@@e{@@@ez@@ey3'{'z'z'{'{'{'{'{@F?@@@A@@@@ఐM$func'@ @@0@@@eL@eL@e@@>@@@@@A'.2@@o@A@ H@e@A@@@ఠ*check_expr ;''@'OA@@&callerfH@e@/!t@@@eH@e$unitF@@@g H@e@@eH@e@@eH@e3''''''''@'@9@:@;@@@࣠ =A#''@'PA@@'3''''''''@6''""@@@@@' @@$expr >A@''@@2@@@e3''''''''@"@@@@@@  @(QA; г>'Flambda((@E((@@@M@@@e @@((@@@T@@@@ఐ2$expr()(*@0@3@(@@c@@@e3((((((((@2?@@@Ġ%Apply(<(= @;%Applyd@@@5}@%apply@@@5^@ACAN@A``@@@l@ঠ$func(W (X A3$func@@@5I!t@@@5B@@@ 3$args u!t@@@5D@@@5C@@A@Af=?f=V@@H@3$kind)call_kind@@@5E@@B@AgWYgWj@@I@3#dbg(T!t@@@5F@@C%@Ahkmhk@@'J@3&inline4R0inline_attribute@@@5G@@D1@Aii@@3M@3*specialise@^4specialise_attribute@@@5H@@E=@All,@@?N@@Ae(*e(<@@CG@ఠW ?XWV@(RA@Q@@@e@$args( ( AUఠ @@(SA@YX@@@e@@@e@@@( ( @@@@@eM@e@@@@@@@@e@@ @@@e@@@ ఐ-used_variable(  (  (@@@@Z@@@eV@@@e@@e3((((((((@DA@C@B41@3@2@@@@ఐL$func(  )(  -@@@t@@@eN@e@@#@@@@@eM@e@@ఠ&callee A) / 9) / ?@) TA@@]@@@fM@e3))))))))@0@@@డ'D#Map$find(Variable)0 B P)1 B X@ )4 B Y)5 B \@@)9 B ]): B a@ @ S @@@`@@@e@@@@eN@e@@@e@@e@@e3)6)5)5)6)6)6)6)6@a@@@@ఐ$func)X B b)Y B f@k@@~@@@eO@e@@ఐ֠7function_variable_alias)j B g)k B ~@c@@'@@@e$@@B@@+%@Ġ)Not_found)|  )}  @@@@@(i@@@f f@)  @@@@@f k@@@ఐߠ$func)  )  @@@zu@ఠ&callee B)  )  @)UA@@@@@fU@@@@@fX@@@ఐ&callee)  )  @@@@@3))))))))@@@@@@A) B J@@@A@) / 5 @@@ఠ(num_args C)  )  @)VA@@#intA@@@f$M@f3))))))))@@@@@@డ(/$List&length)  )  @ )  )  @@@x!a@ah@@@aq)@@@ap@@ao@ykzk @@xC@@@@@@@f'M@f@@@f<@@@f@@f9@@ఐO$args*  *  @!@@0@@@f%N@f(N@f&N@@? @@UO@A@*   @@ *callee_pos D*' !*( ! @@@@ఐq(num_args*1 !*2 !@p@q@r@@)@@@f+M@f*3*#*"*"*#*#*#*#*#@o @@@డ(!-*E !**F !+@@#intA@@@@@@@ @@@@@@@'%subintBA"@@@@!5,~,~"5,~,@@('o@@@@@@@f1@@@@f0@@@f/@@f.@@f-7@@ఐߠ%arity*} !*~ ! @@@@@@fA)`@@@f@@@f?N@ఐ&callee* !"* !(@ư@@@@@fM^@@* !* !)@@U@@@f=@f[O@fGh@@A* !,* !-@@]@@@f < 8@@@g& 2 0 @@@g%@@g$@@g#@@g"@@g!3,w,v,v,w,w,w,w,w@#/W@&@'@@@ Uఐ&caller,"",""@@@@ Zఐ&callee,"",""@ܰ@@@@@g? @ bఐe*callee_pos,"",""@L@@2@@@g6P@gEP@gD4@ kఐg*caller_arg,"",""@>@@A@@S@@@@@gJP@g5G@,"W"h,""@@@@@@g@@@@g@@g @@g M@gUM@gQ@@ఐ0$args,"",""@@@Ӡ@@@g M@g[M@gY@@ @@*@ @@+@ @@,2@J@@-@@@0@@-""-""@@>@@@e@@A@@@e@@@ภ-""&@@'@@E@@@A-)@@G3-,,-----@@@@)+A@]H@gf2@A@/@ డ+B#Map$iter(Variable-.""-/""@ -2""-3""@@-7""-8""@ @` @@@@`@@@gq@4function_declaration@@@gH@gmc@@@gp@@go@@gn@@@@gl`@@@gk@@gj@@gi3-A-@-@-A-A-A-A-A@@@@@@@࣠@&caller HA-i"#-j"#@-v[A@@@@@g3-Y-X-X-Y-Y-Y-Y-Y@@@@@ @@$decl IA@-{"# -|"# @@7@@@g3-i-h-h-i-i-i-i-i@) @@@g@@@@@  @-\ACгF'Flambda-"#-"#@M-"#-"#,@@@U@@@g @@-"#-"#-@@@\"@@@@ డL$iter1Flambda_iterators-#1#7-#1#H@ -#1#I-#1#M@@@@L!t@@@O4@@@O~@@O}@@Z%named@@@O|B@@@O{@@Oz@f!t@@@OyN@@@Ox@@Ow@@Ov@@Ou@HhIl@@GB@50@@@@-@@@g*@@@g@@g@@)@@@g&@@@g@@g@%@@@g"@@@g@@g@@g@@g3--------@@@@@@@ఐ[*check_expr.#1#O.#1#Y@@@XV@P@@@gK@@@g@@g@@g@bఐĠ&caller.*#1#[.+#1#a@@@N@@@g,@@.1#1#N.2#1#b@@@k@@@gf@@@g@@g7@@࣠@  JA@.F#c#q.G#c#r@г%named'Flambda.V#c#u.W#c#|@ .Z#c#}.[#c#@@@@@@g\ @@.b#c#p.c#c#@@@@@@gc@@@@ภ.n#c#.o#c#@@@@@@@gp@.u#c#k.v#c#@@@@@@g@@@g@@gM@gM@g@@ఐ$decl.##.##@@@3@@@g@g@$body.##.##@ư@@@@@gM@gM@g@@ @@@@@gL@g@డ,#Set$iter(Variable.##.##@ .##.##@@.##.##@ @@@@@@C$unitF@@@C@@C@u@@@C @@@C@@C@@C@v@%[@%@@@@)@@@h@@@h@@g@@@@g@@@g@@g@@g@@࣠@#var KA/##/##@/]A@@I@@@h3........@@@@@ @@ ఐ1escaping_function/##/##@@@@<@@@h@@@h@@h3/ / / / / / / / @)h@@@h@#@$@@@@ఐ3#var/1##/2##@@@x@@@h+@@"@@7@@@h9N@h%@ఐ-used_variable/F##/G##@ `@@@@@@h=@@@h<@@h;0@@ఐ]#var/[##/\##@:@@@@@hI@@@@@@@@hWN@hCF@R @@G@/i##/j##@@@@@@h@@@h@@hL@h\L@hYo@@డ.free_variables'Flambda/$$/$$@ /$$/$$@@5ignore_uses_as_callee&optionL$unitF@@@5@@@57ignore_uses_as_argument@@@5@@@5:ignore_uses_in_project_var@@@5@@@5@@@@5/#Set!t@@@5@@5@@5@@5@@5@ MJMJ!MM@@c}@C>@@;96@@@ho@@@hn3B1@@@hm@@@hl0K.@@@hk@@@hj@ @@@hi-@@@hh@@hg@@hf@@he@@hd@^ภ$Some/Ԡภ/$$/$$@@@@g@@@hM@h@@@/G @@@h@hภ/ภ0$%0$% @@@@s@@@hM@h@@@@@@h@uภ$None/@/@y@@@h@@@h,@@ఐĠ$decl0<$% 0=$%@8@@@@@h@h@@$body0H$%0I$%@s@@s@@@hM@hM@hN@@0S$$0T$%@@@@@h@hM@hX@@ @@v@@@hL@h Z@@@[@0d""0e$%@@@@@@g@-@@@g@@g@@gI@hI@h@@ఐ%decls0%%0%% @߰@@@@@h@h0@$funs0%%!0%%%@@@NI@h@@@h=@@h @@@@@hH@g~+@ డ.#Map$iter(Variable0%'%)0%'%1@ 0%'%20%'%5@@0%'%60%'%:@ @ @@@@@@@h@ +4function_declaration@@@iH@h@@@h@@h@@h@ @@@h@@@h@@h@@hh@@࣠@(func_var LA0%;%D0%;%L@0^A@@ @@@h300000000@@@@@ @@ OAঠ¶ms0%;%P0%;%VA ఠ M@1 _A@@@@i@@@i300000000@-.@@@h@'@(@@@@@1%;%N1%;%X@гP'Flambda1%;%[1%;%b@W1"%;%c1#%;%w@@@_@@@h @@1*%;%M1+%;%x@@@f"@@@@డ/$List$iter1;%|%1<%|%@ 1?%|%1@%|%@@@@!a@a y@@@a@@a@ @@@a @@@a@@a@@a@  @@ U@$@@@@!t@@@i'K@i @@@i@@i@@@@i@@@i@@i@@i31`1_1_1`1`1`1`1`@nzw@y@x@@@@࣠@%param NA@1%%1%%@@%@@@i(31v1u1u1v1v1v1v1v@@@@  @1`A, г/)Parameter1%%1%%@61%%1%%@@@>@@@i% @@1%%1%%@@@E@@@@ డ/#Tbl#mem(Variable1%%1%%@ 1%%1%%@@1%%1%%@ @@*!a@V@@@W)@N@@@W( @@@W'@@W&@@W%@@o@"@@@?N@i3@@@i2@a@@@i1@@@i0@@i/@@i.311111111@}tl@o@f@@@@ఐ.used_variables2%%2%%@@@]@@@iF@@డK#var)Parameter2%%2%%@ 2%%2%%@@ @@@;@@@iaC@@@i`@@i_4@@ఐ%param21%%22%%@>@@R@@@ihP@ijP@iiH@@2<%%2=%%@@@@@ikP@igP@@@@#@@@itO@i=V@డ02Q%&2R%&@@@@hN@iy@@@iz@@@@ix@@iw@@ivn@@ఐ(relation2k%& 2l%&@ @@@@@iO@iO@i@@ఐ21param_to_anywhere2&&(2&&9@@@@ఐ(func_var2&&B2&&J@@@@డ#var)Parameter2&K&j2&K&s@ 2&K&t2&K&w@@ @@@@@@i@@@i@@i@@ఐ7%param2&K&x2&K&}@ɰ@@@@@iQ@iQ@i@@2&K&i2&K&~@@@@డ1+2&K&2&K&@@@@~P@i@@@i@@i@@ఐ(relation2&K&@@@@@@iQ@iQ@i@@  @@@@s @@@@ @@@@@iN@iO@i @@2%%@@  @డ1&#Tbl#mem(Variable3&&3&&@ 3&&3&&@@3&&3&&@ @Q @@@{wM@i@@@i@@@@iO@@@i@@i@@i<@@ఐ2escaping_functions39&&3:&&@@@@@@iM@@ఐg(func_var3J&&3K&&@@@@n@@@i]@@?@@$@@@iN@ic@డ1Ġư3^&&3_&&@ð@@@,c@@@jM@i@@@i@ @@@i@@i@@i@@ఐ(relation3|&&3}&&@@@( @@@jN@jN@j@@ఐT1anything_to_param3&&3&'@=@@@&calleeఐ(func_var3&'3&'@@@3O@j@*callee_argడ#var)Parameter3''73''@@ 3''A3''D@@°@@@@@@j@@@j@@j@@ఐN%param3''E3''J@@@@@@j"P@j$P@j#@@3''63''K@@+P@j!@@డ2D3''L3''M@@@@,j@@@j/O@j'@@@j(@@j& @@ఐ0(relation4''U@@@@@@j-P@j0P@j.@@$ @@@@ @@N@@ @@@@@j>@j=N@j'@@4&&@@ )@@@ *@4%%4''V@@@@@@i"@@i!L@jBL@j@@@ఐ0¶ms43'W'`44'W'f@@@@@@i L@jFL@jD@@ @@X@@@jGL@i@4E%;%?4F'W'g@@@n@@@h@i@@@h@@h@@hI@jRI@jNh@@ఐ%decls4a'h'l4b'h'q@@@"@@@j`@j]@$funs4m'h'r4n'h'v@"@@"I@j_@@@j^@@ @@v@@@jtH@h@ఐ)2transitive_closure4'x'z4'x'@#ð@@@-2G@@@jz@@@jy-2N@@@jx@@@jw@@jv@@డ2OQ4'x'4'x'@N@@@ M- @@@jH@j@@@j@@j@@ఐ栐(relation@X@@ f@@@jI@jI@j@@#@@@@B@@@@@@@@@ @@ @@@@U@@j@@@@f@@|@@@@@@@@@@@@3@h@@@@@3@A@B@j@A@@@ɠ@ఠ=invariant_params_in_recursion P4(,,4(,-@4aA@@@$R5function_declarations@@@jB@j'backend$P@@lAB@j$K"@@@sD@sW@@@sqB@j@@jB@j@@jB@j344444444@@@@@@࣠@%decls RA@5(,-5(,-@@,@@@j355555555@>5 (,,5!c66 @@@@  @5/bA8г;'Flambda50(,-"51(,-)@B54(,-*55(,-?@@@J@@@j @@5<(,-5=(,-@@@@Q"@@@JJ SAN5G)-A-H5H)-A-O@5TcA@@R35453535454545454@0=5@8@*@@@@5O)-A-G@@@ఠ.param_to_param T5[*-R-X5\*-R-f@5hdA@@&caller1B!t@@@k3E@j*caller_arg@ @k4E@j&callee@@@kJE@j*callee_arg(@ @kKE@j@.3X@@@k E@k@@@kE@j. @@@k E@j@@jE@j@@jE@j@@jE@j@@jE@j@@jE@j355555555@^i@a@b@@@࣠LL VAP5*-R-h5*-R-n@5eA@@T355555555@c5*-R-T5+--@@@@@5*-R-g @QQ WAU5*-R-p5*-R-z@5fA@@Y355555555@ k@@@@@@5*-R-o@VV XAZ5*-R-|5*-R-@5gA@@^355555555@m@@@@@@5*-R-{@ZZ YA^5*-R-5*-R-@5hA@@b355555555@r@@@@@@5*-R-@@(relation ZA5*-R-5*-R-@6 iA@@j355555555@w@@@@@@@@ఐ.7'implies6+--6+--@+_@@@/3@@@j@@@j@.,@@@j@/ @@@j@@j@@j@@j366 6 66666@%1@(@)@@@@ఐ8(relation62+--63+--@ @@@@@ఐ&caller6C+--6D+--@v@@!@@ఐ*caller_arg6O+--6P+--@q@@-@@6S+--6T+--@@@@@@k2K@k,8@@@ఐ&callee6k+--6l+--@|@@I@@ఐ*callee_arg6w+--6x+--@v@@U@@6{+--@@@@@@kIK@kC_@@v@@`@A@'E@kU@A@@@ఠ1anything_to_param [6---6---@6jA@@&callee7@@@kE@kW*callee_argD@ @kE@k\@/4t@@@kE@k@@@kE@ka/ @@@kE@kb@@kcE@k]@@k^E@kX@@kYE@kV366666666@oh@i@j@@@࣠11 ]A56---6---@6kA@@9366666666@H6---6...:@@@@@6--- @88 ^A<6---6--. @6lA@@@366666666@ P@@@@@@6---@@(relation _A6--. 6--.@7mA@@H366666666@U@@@@@@@@ఐ0#top7 ...7 ...@/@@@0 4@@@kj@@@kl@/@@@kk0 @@@ki@@kh@@kg377777777@$0n@'@(@@@@ఐ7(relation7+...7,...%@ @@{@@@ఐm&callee7<...'7=...-@S@@!@@ఐe*callee_arg7H.../7I...9@M@@-@@7L...&s@@@@@@kI@k7@@M|@@8@{}A@E@k@A@@@ఠ1param_to_anywhere `7c0.@.F7d0.@.W@7pnA@@&caller@@kE@k*caller_arg@@kE@k@@@kE@k@@kE@k@@kE@k@@kE@k37l7k7k7l7l7l7l7l@@@@@@࣠"h dA@70.@.`70.@.a@@#37y7x7x7y7y7y7y7y@270.@.B70.@.@@@@@70.@.X @%"x cA@70.@.n70.@.o@@)@@70.@.b@@(relation bA70.@.p70.@.x@7oA@@0@@@@ఐ(relation70.@.{$@;@ @ &@@<377777777@,@@@')A@WE@k0@A@-@@ఠ(relation e71..71..@7pA@@0ˠ5@@@l'@@@l&E@k377777777@Uzs@t@u@@@ఐ1analyse_functions72..72..@ڰ@@'=@@k#@@@k#@@@k#@@@k@@@k@05@@@k@@@k1@@@kA@kA@kA@kA@kA@kplf@@@k@1@@@kA@kA@kߐA@k[W#J@@@kQM@@@k@1.0@@@k124@@@kِA@kؐA@kאA@k@@@@@k1>6@@@k@@@k@@k@@k@@k@@k@@ks@ఐ'backend8T2..8U2..@@@^@ఐ.param_to_param8a2..8b2..@@@#@@@l@ #@@@l?#@@@l7@@@l>@1y6;@@@l-@@@l=1@@@l4@@l<@@l;@@l:@@l9@@l8F@lOF@lC@ఐ1anything_to_param83..83..@@@-$@@@l6@1*@@@l5'@@l3@@l2@@l1F@lF@l@ఐV1param_to_anywhere83..83..@@@#@@@l0@@@l/@1ǠN@@@l.1ˠR@@@l,@@l+@@l*@@l)F@lF@l@@ఐ͠%decls84..84..@@@@@@l(F@lF@l@@  @@@A@81.. @@@ఠ.not_unchanging h86// 86//@9qA@@&@@@n;E@l388888888@+=6@7@8@@@డ7*$Pair#Map$fold(Variable97//97//'@97//(97//,@@9"7//-9#7//0@ @9'7//19(7//5@@@@2@@@&S@!a@% @#acc@% @@&R@@&Q@@&P@2;@@@&O@  @@&N@@&M@@&L@2v@1\@/ @@@@24@@@m@7 @@@mCE@l@\E@l@@m@@m@@l@2W@@@l@  @@l@@l@@l39K9J9J9K9K9K9K9K@a@@@@࣠@$H qA@ఠ$func i9v7//<9w7//@@9rA@@@@@m/|@@ఠ#var j97//B97//E@9sA@@"@@@m0@@97//;97//F@@@,@@@m3@1@@@m4@@m2@@@@#set kA97//G97//J@9tA@@X399999999@:3@4@5,%@&@'@@@@  @@.not_unchanging lA97//K97//Y@9uA@@d399999999@ n@@@@@@@@ఐ(#set98/]/k98/]/n@@@|399999999@x@@@@@Ġ#Top99/t/~99/t/@7g@@@@399999999@@@@@@@@డ8#Set#add(Variable99/t/99/t/@ 99/t/99/t/@@99/t/99/t/@ @@)B@@@C|@'@@@C{'@@@Cz@@Cy@@Cx@'@0@@@)P@@@mN@'@@@mM'@@@mL@@mK@@mJ:@@ఐ#var:!9/t/:"9/t/@v@@)j@@@mhL@mgL@@ఐ~.not_unchanging:39/t/:49/t/@f@@Y@@H@@Z@Ġ+Implication:A://:B://@6dఠ#set m:J://:K://@:WvA@@8r@@@mF@@@@@@@@@@డ8z$Pair#Set&exists(Variable:i;//:j;//@:m;//:n;//@@:r;//:s;//@ @:w;//:x;//@@@@2@@@u$boolE@@@t@@s@6g@@@r @@@q@@p@@o@3@13i@*@@@@2@@@m}@@@m|@@m{@6|@@@mz@@@my@@mx@@mw3::::::::@aZ@[@\@@@@࣠@% pA@ఠ%func' n:;//:;//@:wA@@X@@@m3::::::::@@@@@ఠ$var' o:;//:;//@:xA@@h@@@m@@:;//:;//@@@r@@@m@w@@@m@@m@@@@డ9B"&&:<00*:<00,@@,@@@K@,@@@J,@@@I@@H@@G(%sequandBA,Ǡ@@@@,,@@8]@@@@@@@m@@@@m@@@m@@m@@m3::::::::@sb[@\@]SL@M@N@@@@డ9B%equal(Variable;+<00;,<00@ ;/<00;0<00@@t@@@t@@@m@r@@@mq@@@m@@m@@m*@@ఐԠ$func;J<00;K<00#@@@@@@mO@m<@@ఐ%func';\<00$;]<00)@E@@@@@mO@mN@@:@@x@@@m@mO@mV@@డ9#not;x<00-;y<000@@-K@@@F-O@@@E@@D(%boolnotAA-M@@@-KLL-LLt@@9Q\@@@@@@@m@@@m@@m@@డ9%equal(Variable;<002;<00:@ ;<00;;<00@@@@@@@@@m@@@@m@@@m@@m@@m@@ఐ@#var;<00A;<00D@@@ @@@nP@n@@ఐ $var';<00E;<00I@@@@@@n P@n @@;<001;<00J@@i@@@m@nP@m@@r @@@@@m@nO@m@@@@r@@@nN@m@;;//;<00K@@@4@@@m@@@m@@mL@nL@nD@@ఐƠ#set<=0L0Z<=0L0]@k@@7@@@mL@n!L@n u@@ @@-@@@n"L@m^@డ:E#Set#add(Variable<1>0^0m<2>0^0u@ <5>0^0v<6>0^0y@@<:>0^0z<;>0^0}@ @B @@@+@@@n(@)@@@n')@@@n&@@n%@@n$@@ఐР#var0^0~0^0@@@+@@@nBL@nA@@ఐ.not_unchanging0^00^0@@@@@:@@oL@n:@ఐ.not_unchangingD1:1g>D1:1m@@@43@@@p@@@pK@pK@pa@@>(D1:1S>)D1:1n@@+@@@n@pK@pk@@ఐ#set>;D1:1o><D1:1r@u@@x@@@@hJ@n{@>BB00>CD1:1s@@@)k@@@n@3@++@@n@@n@@nF@q F@qu@@ఐ I%decls>]E1t1x>^E1t1}@ @@,@@@q@q5@$funs>iE1t1~>jE1t1@,@@,ޠSF@q@@@qB@@డ<#Set%empty(Variable>E1t1>E1t1@ >E1t1>E1t1@@>E1t1>E1t1@ @Ӱ @@,.@@@q0d@@@@o@A@>B00 @@@ఠ*unchanging >G11>G11@>|A@@,D@@@qME@q53>>>>>>>>@@@@@@డ<#Set$diff(Variable>G11>G11@ >G11>G11@@>G11>G11@ @@,j@@@C@,o@@@C,r@@@C@@C@@C@,o@5zL@@@@,y@@@q;@,~@@@q:,@@@q9@@q8@@q7=@@ఐ¶ms>G11>G11@G@@,@@@qOF@qUF@qTQ@@ఐ .not_unchanging?G11?G11@)@@,@@@qNF@q[F@qZe@@R @@if@A@?G11 @@@ఠ*aliased_to ?H11?H11@?)}A@@.m,@@@rK@rA@@@rbE@q\3????????@@@@@@డ=T$Pair#Map$fold(Variable?CI11?DI11@?GI11?HI11@@?LI11?MI12@ @?QI12?RI12@@*@@@@8A@@@qg@=@@@qE@qc@EE@qa@@qf@@qe@@qd@8d@@@qb@  @@q`@@q_@@q^3?X?W?W?X?X?X?X?X@D@@@@࣠@*U A@@?I12 ?I12@@ @@@qY@@ఠ#var ?I12?I12@?~A@@ )@@@qh@@?I12 ?I12@@@ 3@@@q@ 8@@@q@@qw@@@@#set A?I12?I12@?A@@R3????????@*#@$@%@@@@@@'aliases A?I12?I12 @?A@@\3????????@f@@@@@@@@ఐ&#set?J2$22?J2$25@@@t3????????@p@@@@@Ġ+Implication?K2;2E?K2;2P@<ఠ#set ?K2;2Q?K2;2T@?A@@>@@@q@@@@@@@@@డ>#Set#mem(Variable@L2U2d@L2U2l@ @L2U2m@L2U2p@@@ L2U2q@ L2U2t@ @@/U@@@D@-@@@D@@@D@@D@@D@-@6d@@@@/e@@@q@-@@@q@@@q@@q@@q3@@@@@@@@@[JC@D@E@@@@ఐ#var@9L2U2u@:L2U2x@@@/@@@qL@q@@ఐ*unchanging@KL2U2y@LL2U2@ @@-@@@qL@qL@q)@@T @@1@@@qL@q/@డ>$Pair#Set$fold(Variable@pM22@qM22@@tM22@uM22@@@yM22@zM22@ @@~M22@M22@@@@8@@@-@..@B@@,@@+@@@@qL@sL@s@@ఐA'aliasesBY44BY44@)@@@@@@E@Ġ#TopC Z44C Z44@@@@@@<@@<@Ġ+ImplicationCZ44CZ44@?9@CZ44CZ44@@AA@@@qN@@@ @@O@@O@@@@P@@@ఐo'aliasesC)Z44C*Z44@W@@Z@@@AC-J2$2,@@3CCCCCCCC@\@@@C0I12C1Z44@@@< @@@qz@@@@qy@@qx@@qwF@s,F@s(@@ఐ (relationCI[44CJ[45@ H@@@@@@ఐM#varD `55D!`55@@@/H@@@sH@sH@s@@ఐ*aliased_toD4`55D5`55@o@@3.@@@s+@@I@@2,@Ġ)Not_foundDFa55DGa55@:@@@@C3@@@s3D5D4D4D5D5D5D5D5@<@@@DNa55@@1@@@s@@@డBu#Set%empty(VariableDaa55Dba55@ Dea55Dfa55@@Dja55Dka55@ @ @@k"@ఠ#set Dxb56Dyb56 @DA@@2@@@so@@2@@@sr@@@ఐ#setDb56 Db56@@@@@3DvDuDuDvDvDvDvDv@~@@@@@AD`55@@E@D_5x5Db56@@@/@@@st@@ssE@sE@s@@ఐ*unchangingDc66@{@@2F@@@s@@"@@@5@@@@@@@@@@@ @ @@ @ @@ 0@ @@ @@@ @zA@B@s@A@@@@ఠ7invariant_param_sources De6"6&De6"6=@DA@@@*@@@tB@s'backend4.@@tB@s4)C@@@v%J@u@@@v,B@s@@sB@s@@sB@s3DDDDDDDD@ @@@@@࣠@%decls ADe6"6>De6"6C@EA@@-3DDDDDDDD@:De6"6"Dt88@@@@@  @-- A1Ee6"6EE e6"6L@EA@@53DDDDDDDD@ C@@@@@@Ee6"6D@@@ఠ.param_to_param Ef6O6UEf6O6c@E)A@@&caller@@@t=E@s*caller_arg@ @t>E@s&callee@@@tTE@s*callee_arg@ @tUE@s@>SC@@@tE@t@@@tE@s>^ @@@tE@s@@sE@s@@sE@s@@sE@s@@sE@s@@sE@s3EPEOEOEPEPEPEPEP@\g@_@`@@@࣠JJ ANEtf6O6eEuf6O6k@EA@@R3EaE`E`EaEaEaEaEa@aE|f6O6QE}g66@@@@@Ef6O6d @QQ AUEf6O6mEf6O6w@EA@@Y3EuEtEtEuEuEuEuEu@ i@@@@@@Ef6O6l@VV AZEf6O6yEf6O6@EA@@^3EEEEEEEE@m@@@@@@Ef6O6x@ZZ A^Ef6O6Ef6O6@EA@@b3EEEEEEEE@r@@@@@@Ef6O6@@(relation AEf6O6Ef6O6@EA@@j3EEEEEEEE@w@@@@@@@@ఐ='impliesEg66Eg66@;@@@>ΠC@@@s@@@s@=@@@s@>@@@s@@s@@s@@s3EEEEEEEE@%1@(@)@@@@ఐ8(relationEg66Eg66@ @@@@@ఐ&callerFg66Fg66@v@@!@@ఐ*caller_argFg66Fg66@q@@-@@Fg66Fg66@@@@@@t#Map#add(VariableI*s8J8eI+s8J8m@ I.s8J8nI/s8J8q@@I3s8J8rI4s8J8u@ @13 @@@4Z@@@u@]@8b@@@u8f@@@u@@u@@u@@u3I1I0I0I1I1I1I1I1@f=6@7@8@@@@ఐ#varIUs8J8vIVs8J8y@@@4{@@@vK@v@@ఐV#setIgs8J8zIhs8J8}@@@"@@ఐ(relationIts8J8~Ius8J8@@@/@@N@@0@@@AIyq88#@@@I{p77I|s8J8@@@Bk@@@u@@@@u@@u@@uE@vVE@vR@@ఐu(relationIt88It88@@@B.E@va@@@v` @@డG#Map%empty(VariableIt88It88@ It88It88@@It88@ @5  @@9D@v|@@@v{D@@q@@O.@@@P@@@Q@C@@RT@J@@S_@A@B@v@A@@@㠰@ఠ)pass_name ԠIv88Iv88@IA@@H@@@vB@v3IIIIIIII@ @@@@@0unused-argumentsIv88Iv88@@Iv88Iv88@@ @A@Iv88@@@@Ġ2Iw88Iw88@2@@@@2@@@v3IIIIIIII@!/(@)@*@@@డH`2o2qJ w88J w88@2n@@@5$listK&stringQ@@@z@@@zB@v@@@v@2y@@@v@@v@@v(@@డ'Clflags*all_passes'ClflagsJ6w88J7w88@ J:w88J;w88@@&Stdlib#ref30@@@y@@@y@@@y@1utils/clflags.mli@@'Clflags@@@5K@@@vC@zC@y_@@ภ;ȰJew88Jfw88@>ఐ)pass_nameJow88Jpw88@q@@[C@z v@డH2)2+J}w88J~w88@2(@@@6'IӠuB@z@@@zC@zC@z @@@z  @@z @@డj*all_passes'Clflags Jw89@ Jw89Jw89 @&@g'@@6N'@@@zD@zD@z@@1 @@)@@@ @@B@z@@|@@3?@@@zC@v@A@Jw88@@@@ఠ0unused_arguments Jy9 9Jy9 9!@JA@@@:45function_declarations@@@zB@z'backend:2@@{B@z#8@@@~~B@z$@@z%B@z@@zB@z@࣠@%decls A@Jy9 9#Jy9 9(@@#@@@z 3JJJJJJJJ@5Jy9 9 J=\=g@@@@  @KA/г2'FlambdaK y9 9+K y9 92@9K y9 93Ky9 9H@@@A@@@z @@Ky9 9"Ky9 9I@@@H"@@@AA AEK y9 9KK!y9 9R@K-A@@I3K K K K K K K K @0=5@8@*@@@@K(y9 9J@@@ఠ$dump K4z9U9[K5z9U9_@KAA@@$boolE@@@z2E@z(3K)K(K(K)K)K)K)K)@(h@ @!@@@డ+dumped_pass'ClflagsKPz9U9bKQz9U9i@ KTz9U9jKUz9U9u@@@A@@@y$@@@y@@y@5@@@@@@@@@z,1@@@z+@@z*.@@ఐ)pass_nameKxz9U9vKyz9U9@z@@%@@@z3F@z5F@z4B@@3 @@IC@A@Kz9U9W @@@ఠ.param_to_param K{99K{99@KA@@&caller4@@@zE@z7*caller_argA@ @zE@z<&calleeM@@@zE@zA*callee_argZ@ @zE@zF@DƠI@@@zrE@zv@@@zuE@zKDѠ @@@zqE@zL@@zME@zG@@zHE@zB@@zCE@z=@@z>E@z8@@z9E@z63KKKKKKKK@@@@@@࣠JJ ANK{99K{99@KA@@R3KKKKKKKK@aK{99K|9: @@@@@K{99 @QQ AUK{99K{99@LA@@Y3KKKKKKKK@ i@@@@@@L{99@VV AZL {99L {99@LA@@^3KKKKKKKK@m@@@@@@L{99@ZZ A^L{99L{99@L*A@@b3L L L L L L L L @r@@@@@@L%{99@@(relation AL/{99L0{99@L<A@@j3LLLLLLLL@w@@@@@@@@ఐDi'impliesLA|99LB|99@A@@@EAJ@@@zU@@@zT@D^@@@zW@E<@@@zV@@zS@@zR@@zQ3L@L?L?L@L@L@L@L@@%1@(@)@@@@ఐ8(relationLd|99Le|99@ @@@@@ఐk&calleeLu|99Lv|99@T@@!@@ఐf*callee_argL|99L|99@N@@-@@L|99L|99@@@٠@@@zK@z8@@@ఐ&callerL|99L|99@@@I@@ఐ*caller_argL|99L|9:@@@U@@L|99@@@@@@zK@z_@@v@@`@A@%E@z@A@@@ఠ1anything_to_param L~::L~::&@LA@@&callee@@zE@z*callee_arg@@zE@z@@@zE@z@@zE@z@@zE@z@@zE@z3LLLLLLLL@ [T@U@V@@@࣠7 A@L~::/L~::0@@#3LLLLLLLL@2L~::L~::R@@@@@L~::' @%7 A@L~::=M~::>@@)@@M~::1@@(relation AM ~::?M ~::G@MA@@0@@@@ఐ(relationM~::J$@;@ @ &@@<3MMMMMMMM@,@@@')A@WE@z0@A@-@@ఠ1param_to_anywhere M+:V:\M,:V:m@M8A@@&caller@@@{)E@z*caller_arg@ @{*E@z@FIK @@@zE@{@@@{E@zFT @@@zE@z@@zE@z@@zE@z@@zE@z3MFMEMEMFMFMFMFMF@z@@@@@࣠11 A5Mj:V:oMk:V:u@MwA@@93MWMVMVMWMWMWMWMW@HMr:V:XMs::@@@@@Mu:V:n @88 A<M~:V:wM:V:@MA@@@3MkMjMjMkMkMkMkMk@ P@@@@@@M:V:v@@(relation AM:V:M:V:@MA@@H3M}M|M|M}M}M}M}M}@U@@@@@@@@ఐF#topM::M::@E@@@FKd@@@z@@@z@F@@@zF @@@z@@z@@z3MMMMMMMM@$0n@'@(@@@@ఐ7(relationM::M::@ @@{@@@ఐm&callerM::M::@S@@!@@ఐe*caller_argM::M::@M@@-@@M::s@@@@@@{(I@{"7@@M|@@8@{}A@E@{0@A@@@ఠ(relation M::M::@N A@@FK@@@{@@@{E@{13MMMMMMMM@@@@@@ఐ4Ԡ1analyse_functionsN::N::@ @@4=o@@{S449B@@@{R49G@@@{Q49L@@@{I44@@@{P@G0K@@@{?@@@{OG7@@@{FA@{NA@{MA@{LA@{KA@{J4444@@@{H@GK@@@{GA@{EA@{DA@{C449|@@@{B44@@@{A@G`0@@@{@Gd4@@@{>A@{=A@{@@@|j@  @@|h@@|g@@|f3OWOVOVOWOWOWOWOW@;@@@@࣠@'fun_var AO};];hO~;];o@OA@@:@@@|Q@@@@$decl AO;];pO;];t@OA@@53O{OzOzO{O{O{O{O{@`:@@@|@@@@@@  @@#acc AO;];uO;];x@OA@@B3OOOOOOOO@!L@@@@@@@@డN $List)fold_leftO;|;O;|;@ O;|;O;|;@@@@#acc@`@!a@` @@a@@a@ @+d @@@a@@a@@a@@a@+^33+_3r@@+]]@$@@@@I@|@?*@@@}.I@| @@|@@|@ @ @@@|@@|@@|@@|3OOOOOOOO@LX@O@P@@@@࣠@#acc AP;;P;;@PA@@&3OOOOOOOO@@@@@@@%param AP;;P;;@PA@@13OOOOOOOO@%8@@@@@@@@డNB$Pair#Map$find(VariableP1;;P2;;@P5;;P6;;@@P:;;P;;;@ @P?;;P@;;@@Gݰ@@@I-@@@|@IEN @@@|M@|@@@|@@|@@|3P<P;P;P<P<P<P<P<@?Kr@B@C@@@@@ఐꠐ'fun_varPd;;Pe;;@Ұ@@;@@@|@@ఐe%paramPs;;Pt;;@ @@#@@Pw;;Px;;@@@N@|ᠠ@I@|@@|N@|1@@ఐ(relationP;;P;;@[@@IE@@@|B@@e@@IC@Ġ)Not_foundP;<P;<@F@@@@O@@@}S@P;< @@Nb@@@}X@@@డN#Set#add(VariableP;<"P;<*@ P;<+P;<.@@P;m@@@}>p@@@}@@}@@}@@ఐҠ%paramP;<3P;<8@@@@@ఐ#accP;<9P;<<@ذ@@@@5@@@Ġ+ImplicationP<=@@@}@>@@@}?@@}>@@}=@@ఐ3%paramQA<=@@@~F@~%@6Unused arguments: %a@.@@PC@@@~F@~bF@~a @@@@٠Р@@@}F@~@@డQ#Set%print(VariableS}= =8S~= =@@ S= =AS= =D@@S= =ES= =J@ @@LLL@@@DY@A0@@@DXL@@@DW@@DV@@DU@A0@LŰ@@E@~vD@@ఐ|)argumentsS= =KS= =T@N@@ F@~{S@@S<=S=U=Z@@V@@S<<@@X@ఐ)argumentsS=\=^@^@@a@ @@b@w@@@@@@K@@`@@@@@@@<@@@A@B@~@A@@@ @RQA@QL@LK@KI@I@C @CC9@:@@ @  @  @ @ @@3SSSSSSSS@  @@@ 0Invariant_paramsB@@A@@@@@ H************************************************************************SA@@SA@L@ H SBMMSBM@ H OCaml SCSC@ H SDSD3@ H Pierre Chambart, OCamlPro TE44TE4@ H Mark Shinwell and Leo White, Jane Street Europe T FT F@ H TGTG@ H Copyright 2013--2016 OCamlPro SAS THTHg@ H Copyright 2014--2016 Jane Street Group LLC TIhhTIh@ H T!JT"J@ H All rights reserved. This file is distributed under the terms of T'KT(KN@ H the GNU Lesser General Public License version 2.1, with the T-LOOT.LO@ H special exception on linking described in the file LICENSE. T3MT4M@ H T9NT:N5@ H************************************************************************T?O66T@O6@ 6 CR-someday pchambart to pchambart: in fact partial application doesn't work because there are no 'known' partial application left: they are converted to applications new partial function declaration. That can be improved (and many other cases) by keeping track of aliases in closure of functions. TETTFX@  These analyses are computed in two steps: * accumulate the atomic <- relations * compute the least-fixed point The <- relation is represented by the type t Variable.Pair.Map.t if [Variable.Pair.Map.find (f, x) relation = Top] then (f, x) <- Top is in the relation. if [Variable.Pair.Map.find (f, x) relation = Implication s] and [Variable.Pair.Set.mem (g, y) s] then (f, x) <- (g, y) is in the relation. TKZTLh@ Depth-first search for all implications for one argument. Arguments are moved from candidate to frontier, assuming they are newly added to the result. TQD j lTRF  @ 3 Obtain fresh candidate for the frontier argument. TWK  TXK  @ 9 Result change means candidate becomes part of frontier. T]T C KT^T C @  CR-soon pchambart: to move to Flambda_utils and document mshinwell: I think this calculation is basically the same as [Flambda_utils.fun_vars_referenced_in_decls], so we should try to share code. However let's defer until after 4.03. (And note CR below.) Tc`Tde@ . Finds variables that represent the functions. In a construction like: let f x = let g = Symbol f_closure in .. the variable g is bound to the symbol f_closure which is the current closure. The result of [function_variable_alias] will contain the association [g -> f] TifTjo@ CR-soon mshinwell: consider having the body passed to this function and using fv calculation instead of used_variables. Need to be careful of "let rec" ToTpU@6 not a recursive call Tu1TvK@ S Ignore overapplied parameters: they are applied to a different function. T{Y_T|@ If the called closure is in the current set of closures, record the relation (callee, callee_arg) <- (caller, caller_arg) TTZ@6 not a recursive call T,ST,m@ [ We only track dataflow for parameters of functions, not arbitrary variables. T!+Tf@ ^ If a function is partially applied, consider all missing arguments as "anything". T!1!9T!u!@ CR-soon mshinwell: we should avoid recomputing this, cache in [function_declaration]. See also comment on [only_via_symbols] in [Flambda_utils]. T##T$u$@ X A parameter [x] of the function [f] is considered as unchanging if during an 'external' (call from outside the set of closures) call of [f], every recursive call of [f] all the instances of [x] are aliased to the original one. This function computes an underapproximation of that set by computing the flow of parameters between the different functions of the set of closures. We record [(f, x) <- (g, y)] when the function g calls f and the y parameter of g is used as argument for the x parameter of f. For instance in let rec f x = ... and g y = f x We record [(f, x) <- Top] when some unknown values can flow to the [y] parameter. let rec f x = f 1 We record also [(f, x) <- Top] if [f] could escape. This is over approximated by considering that a function escape when its variable is used for something else than an application: let rec f x = (f, f) [x] is not unchanging if either (f, x) <- Top or (f, x) <- (f, y) with x != y Notice that having (f, x) <- (g, a) and (f, x) <- (g, b) does not make x not unchanging. This is because (g, a) and (g, b) represent necessarily different values only if g is the externally called function. If some value where created during the execution of the function that could flow to (g, a), then (g, a) <- Top, so (f, x) <- Top. T''T&,,@ X We complete the set of aliases such that there does not miss any unchanging param T]55T^5_5w@@*./ocamlopt)-nostdlib"-I(./stdlib"-I1otherlibs/dynlink"-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_events2-function-sections"-cTT J/home/ci/builds/workspace/precheck/flambda/false/label/ocaml-ubuntu-latest ?>3210/.-,+*)('&%$#"! @@0 DnW$!3TTTTTTTT@T@@/Allocated_const0ЖݔTWŠ(Asttypes0>n{T8cئB0)LSxjf15Build_path_prefix_map0z HkGs8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ2Clambda_primitives01U1 0r.SU߈#g/Closure_element0.1 @1ѧU*Closure_id0sM;@eAlx.Closure_origin0aBzlt@*Cmi_format0_j~GB00Compilation_unit0i(&ۥ$P.*Data_types0I'Ue`wq]Ѡ)Debuginfo0PtJ=^w/#Env0J=,Wu)Export_id0Qh: "Dq01Ux|ՍCb- ?08Jn8I:-0 ʆR97cZ*Format_doc0]mWϓ:Mݠ*Freshening0$1\MmAʳ%Ident0ki8' x%+Š,Identifiable0~ܽǞ+SĐ0ixjx-{`͡;7Internal_variable_names0HdeՄL ԩU0?| ^"0x]XZ&Lambda0.Vu$ ^3,Linkage_name0h AEa.C1 R)Load_path0I@18 ~(Location0a7cK_H%9)Longident0s `7mɕc$Misc0Z1X=_c0Mutable_variable0_ ?.+L'Numbers00$ PS6?nu.+Outcometree0euWS~d栠)Parameter0Kb"Qjʑǭ@uYu)Parsetree0Uҩ=p>*%"e$Path0(|r>8۠dwx)Primitive0²~$xzT෠'Profile0E.8_~e*Projection0n訥(2Set_of_closures_id0pi|ny6Set_of_closures_origin0{HO/Pؠ%Shape0mA;HXߠ3Simple_value_approx0P*+ K`#4MK0Static_exception0wBߝܔd3B&Stdlib0-i8Q"L{v;+Stdlib__Arg0اp2/٠r)w-Stdlib__Array0?3$( Q&.Stdlib__Buffer08APF< t..Stdlib__Digest0l!LHgErζ .Stdlib__Domain0Bj|5s)ڠ.Stdlib__Either0Vy`u~c à.Stdlib__Format0ɢb tLir/Stdlib__Hashtbl0ѱN][/!-Stdlib__Int640l-J ~m-۠,Stdlib__Lazy0* -S$.)"0D.Stdlib__Lexing0e<.V ,Stdlib__List0eXԶ4r+Stdlib__Map0hؤ5O8% By.Stdlib__Result06 ]/J+Stdlib__Seq0nwzG&amg+Stdlib__Set0kb'G|PIF(.Stdlib__String0s&Switch0ܨnm\7&Symbol0_)Ӷӥ!h#Tag0 %XC}{3.Type_immediacy0A^abOhՠ%Types0R.z78m)Unit_info0ڀh%(2Var_within_closure0H6ʤ(fc2ӉrHTm0]Eè0=(Warnings0mJɒkgr