Caml1999T031- <3Extract_projections-ocaml.warning )middle_end/flambda/extract_projections.mlQQ@5+a-4-9-30-40-41-42-66 Q Q@@QQ@@@@@QQ@@0@@@@@@%arrayH8@@M@A@A@@@@@@&_none_@@A@@@ $boolE8@@%false^@@ @$true_@@@@@A@@@@@@A@$charB8@@@A@@@@@@A@#exnG8@@AA@@@@@@@@5extension_constructorP8@@@A@@@@@ @@@%floatD8@@@A@@@@@$@@@*floatarrayQ8@@@A@@@@@(@@@#intA8@@@A@@@@@,@A@%int32L8@@@A@@@@@0@@@%int64M8@@@A@@@@@4@@@&lazy_tN8@@O@A@A@Y@@@@@=@@@$listI8@@P@A"[]a@@J@"::b@@@Q@@W@ @@A@Y@@@@@Z@@@)nativeintK8@@@A@@@@@^@@@&optionJ8@@S@A$Nonec@@k@$Somed@@r@@@A@Y@@@@@u@@@&stringO8@@@A@@@@@y@@@$unitF8@@"()`@@@@@A@@@@@@A@ .Assert_failure\ p@@@@Jm@@@@@@V@@A=ocaml.warn_on_literal_pattern@@0Division_by_zeroY @@@A  @+End_of_fileX !@@@A@'FailureU )@%@@A@0Invalid_argumentT 2@.@@A$#@-Match_failureR ;@:67@@\@@Aʠ21@ )Not_foundV I@@@AҠ:9@-Out_of_memoryS Q@@@AڠBA@.Stack_overflowZ Y@@@A⠰JI@.Sys_blocked_io[ a@@@A꠰RQ@)Sys_errorW i@e@@A󠰠[Z@:Undefined_recursive_module] r@qmn@@c@@Aih@ %bytesC8@@@A@@@@@@@@&Stdlib@@Р?Int_replace_polymorphic_compare?Int_replace_polymorphic_compareWRXR@@ 0FEEFFFFF@D@@@@@0GFFGGGGG@F@@_R@@ @L!AAkTlT@AР3Simple_value_approx3Simple_value_approxvTwT@@ 0eddeeeee@@@@@|T@@!EBUU@AР7Inline_and_simplify_aux#Env7Inline_and_simplify_auxUU@@0@?6A/@#@@@@@U @ @@ࠠ7known_valid_projectionsbb@@@#env9!t@@@(C@Z+projections*Projection#Set!t@@@C@`/which_variables(Variable#Map!t'Flambda.specialised_to@@@C@@@@C@f)@@@C@g@@hC@a@@bC@[@@\C@Y0@YqAj@WA@@@EEJbb@@@M0@[bJ@@@@@IINbb@@@Q0@b@@#C@@@@GGL"b#b @@@O0@d@@3D@@@@డ*Projection#Set&filter*Projection:c#%;c#:@@@{#elt@@@S$boolE@@@R@@Q@@@@P@@@O@@N@@M@ !middle_end/flambda/projection.mliJ  J  @@+Stdlib__SetW! @@@@@@C@@@C@@C@@@@C@@@C@@C@@C@0XWWXXXXX@IT@L@{E@@@@@*projectionI~c#@c#J@@@@@@E@%@@@ࠠ$fromJdNXdN\@@@(Variable!t@@@E@)0@/']@@@$@!@F@@@డx/projecting_from*ProjectiondN_dNy@@!t@@@%@@@@@@gM  hM  @@W@@@@@E@-2@@E@,@E@+-@@ఐX*projectiondNzdN@7@@@@F@=@@+@@F>@@dNT@@@ࠠ)outer_variee@@@(Variable!t@@@E@0@Xjd@e@G@@@డ(Variable#Map$find(Variable f f@@6#key@@@g@=!a@@@@f@@e@@d@6utils/identifiable.mlimm@@+Stdlib__Map`@@@@@F@@SL@@F@M@F@ @F@ 0@=@@@@ఐ$from:f;f@H@@1@@G@PG@O@@ఐ-/which_variablesLfMf@߰@@y @@G@@n!@Ġ)Not_foundZg[g@8)Not_found#exnG@@@@@@&Stdlib A@A&_none_@@A@@I@@@@@@H@@rg@@@@ภ%false{g|g@85?@@@N@@@@B@@AE@@8@ @@@@F@@g @@E@@ࠠ)outer_varƠhh@@@@@@l@г'Flambdahh3@@@@@{@@hh4@@@@@డ*Freshening.apply_variable*Fresheningi8Bi8[@@*Freshening!t@@@@!t@@@@@@@@@@@ !middle_end/flambda/freshening.mliI  I  @@K@@@@@F@@@@F@@@F@@F@@F@0@XR@S@I@@@@డq*freshening!Ei8]i8i@@G@@@!*Freshening!t@@@!@@!@ .middle_end/flambda/inline_and_simplify_aux.mliuuwuu@@7Inline_and_simplify_aux\@@@[@@G@"/@@G@".@G@"-2@@ఐ&#env#i8j$i8m@@@p?@@'i8\(i8n@@l@@G@G@$}H@"5I@@ఐ)outer_varmiddle_end/flambda/flambda.mliM  M  .@@-]@AK  K  @@1\<*@@@@G@G@$G@$@@2@@E@@@Af6@@@@e8@@@ࠠ&approxTkk@@@3Simple_value_approx!t@@@(E@$0@@@H@@@డ$(find_exn!Ekk@@@@@!;@(Variable!t@@@!:*@@@!9@@!8@@!7@C  C  J@@I@@@@@E@$@@@E@$<@@E@$@E@$@E@$7@@ఐ᠐#envkk@ɰ@@+D@@ఐ)outer_varkk@N@@;@@F@(F@(F@(X@@I @@aY@@k @@ఐ*projectionll@f@@@@@(0@k}w@x@J@@@Ġ+Project_varmm@8+Project_varf@@@@V+project_var@@@@A@@D@AE  E  @@@[Rࠠ+project_var.m/m@@@@@@(0@-@@@@@!@@@@G@(@@@@డ8check_approx_for_closure!AGn Hn "@@!t@@@,:checked_approx_for_closure@@@,@@,@ *middle_end/flambda/simple_value_approx.mliAAAA@@3Simple_value_approx@@@@@F@,@@F@,@F@,0QPPQQQQQ@`>8@9@tK@@@@ఐ䠐&approxtn #un )@m@@-@@G@-G@-@@6@@+@@@-@Ġ"Oko / 9o / ;@8"Ok<@@@,@F-value_closure@@@,&optionJ(Variable!t@@@,@@@,&Symbol!t@@@,@@@,j5value_set_of_closures@@@,@D@AA@Ae@@f@0@c@@@dࠠ._value_closureo / =o / K@@@8@@@-g@ࠠ+_approx_varo / Mo / X@@@?<@@@-@@@-x@ࠠ+_approx_symo / Zo / e@@@@?@@@-@@@-@ࠠ5value_set_of_closuresp g up g @@@C@@@-@@@sp g @@@@H@-@@@@డ2Var_within_closure#Map#mem2Var_within_closureq  q  @@2Var_within_closure#Map#key@@@/,@ !t!a@/@@@/+$boolE@@@/*@@/)@@/(@6utils/identifiable.mlimm@@+Stdlib__MapG('@@@%@@F@0@@@F@4F@0@@F@0@@F@0~@F@0}@F@0|087788888@@@^L~@@`Muo@p@bNf`@a@dO@@@@ఐ8+project_varfq  gq  @@@N@@G@0@0!@#varrq  sq  @,#varY@@@2Var_within_closure!t@@@@B,'closure!t@@@@@ @A6ihj7ih@@H,*closure_id*Closure_id!t@@@@A@ADjEj@@I(@AHkIk@@J;.@@@@G@0G@0Y@@ఐ5value_set_of_closuresr  r  @\@@@@G@4@4m@*bound_varsr  r  @,*bound_vars @@@+B2Var_within_closure#Map!t@@@+1@@@+0@A$,.function_decls5function_declarations@@@+/@@@@@@{,)free_varsD#Map!t'Flambda.specialised_to@@@+3@@@+2@B@@4@@},0invariant_params6&Stdlib$Lazy!te#Map!tm#Set!t@@@+6@@@+5@@@+4@CA@@575o@@~,)recursiveX"$Lazy!t#Set!t@@@+8@@@+7@DW@@prp@@,$sizen8$Lazy!t#Map!t#intA@@@+<@@@+;@@@+:@@@+9@Ey@@@@@,0specialised_args#Map!tq.specialised_to@@@+>@@@+=@F@@ "$ "]@@ A,*freshening*Freshening+Project_var!t@@@+?@G@@@@B,6direct_call_surrogates*Closure_id#Map!t !t@@@+A@@@+@@H@@12@@0C@@56@@4|@@̠N@@G@4H@@@@R@@F@5 F@5N@Ġ%Wrongs  s  @8%Wrong@@@@AA@AS??T?@@@@R@@  @@]@@H@- L@@L@@ภ=s  s  @<@@@$F@5 V@@Ant  @@{@@E@?7E@50@^@@@Ġ/Project_closureu  u  -@8/Project_closure@ /project_closure@@@@AA@D@AF  F  !@@@Sࠠ/project_closureu  .u  =@@@@@@(0@@@@@@@@@@G@(@@@@డ 'strict_check_approx_for_set_of_closures!Av A Uv A ~@@@@@, )strict_checked_approx_for_set_of_closures@@@,@@,@===E=s@@@@@@@F@5@@F@5@F@50@93@4@&P@@@@ఐ&approx&v A 'v A @@@@@G@5*G@5)@@1@@)@@@5#@Ġ"Ok@@@+@@@+@C,/is_classic_mode$boolE@@@+@@ @@dvxev@@ci,2set_of_closures_id2Set_of_closures_id!t@@@+@A@@rs@@qj,6set_of_closures_origin,6Set_of_closures_origin!t@@@+@B%@@@@k:@@@@lY@@@:s@@H@;M.@@ y   y  L@@@@G@;>4@@a@@@@F@;vF@;o:@Ġ%Wrong z M W z M \@8%Wrong@@@@AA@A<<<<@@@@@  @@@@H@5=@@@@ภ z M ` z M e@@@@$F@;u@@A v A I { f q@@UE@;}0        @@@@Ġ;Move_within_set_of_closures !| r z "| r @8;Move_within_set_of_closures @_;move_within_set_of_closures@@@@AB@D@AG " $G " `@@@dTࠠ$move 7| r  8| r @@@@@@(0 ( ' ' ( ( ( ( (@6@@@@@@@@@G@(@@@@డ8check_approx_for_closure!A P}   Q}  @ @@@ @@F@;@@F@;@F@;0 F E E F F F F F@U*$@%@ iS@@@@ఐ٠&approx i}   j}  @b@@"@@G@;G@;@@"@@ @@@;@Ġ"Ok ~   ~  @ࠠ-value_closureY ~   ~  @@@@@@;3@ࠠ+_approx_varZ ~   ~  @@@@@@;@@@;D@ࠠ+_approx_sym[ ~   ~  @@@@@@;@@@;U@ࠠ6_value_set_of_closures\      4@@@@@@;b@@@?   5@@m@@H@;g@@g@@డ%equal*Closure_id B   B  @@!T!t@@@7j@ @@@7i$boolE@@@7h@@7g@@7f@6utils/identifiable.mlijcmjc@@/Stdlib__Hashtbl`@@@@@F@;@@@F@;@@F@;@F@;@F@;0        @{u@v@ Tpj@k@ Ua[@\@ VRL@M@ W@@@@ఐ-value_closure B   B  @@@@@G@;@;!@*closure_id B   B  @,*closure_id@@@+!t@@@+@A,/set_of_closures @@@+@@@A/@@g@A020L@@h(@@j@@G@;G@;F@@ఐ$move LB   MB  @@@+@@G@<@<Z@*start_from XB   YB  @,*start_from6@@@!t@@@@A,'closure !t@@@@@ @A ` `4@@ D,'move_to!t@@@@B@A &boq 'bo@@ F@A *aRT +aRn@@ E7*@@@@G@<G@<@@0@@ E@@F@<F@<@Ġ%Wrong C   C  $@@@@@I@@H@;C@@C@@ภ) C  ( C  -@(@@@F@<M@@A }   D . 9@@E@<0        @R@@@Ġ%Field E : B E : G@8%Field@#intA@@@ 1!t@@@@BC@D@A wH a c xH a ~@@@ Uࠠ+field_index E : I E : T@@@@@@(@@ E : V E : W@@@@G@(@@@- E : X@@ @@G@(@@@@డ 6check_approx_for_block!A F \ j F \ @@@@@,8checked_approx_for_block@@@,@@,@999:@@@@@@@F@<"@@F@F@= I   I  @@#intA@@@@@@@$boolE@@@@@@@@ )utils/int_replace_polymorphic_compare.mliFF@@?Int_replace_polymorphic_compareE@@@@@G@@@ఐF+field_index I   I  @ @@7@@H@H@>@@H@>@@H@>@H@>@@ఐ>&fields I  I @@@<@@I@>I@>I@>@@F @@@@H@I@> @@g@@1@@G@H@<@@@@F@>@@A F \ d@@-E@?6@@A l#@@ @@D@?{0        @@@@(@@ X@ q)@@ @ *@@ @@D@?}D@?| a@@A c#; I @@@ @@D@ @@D@@D@D@?0        @ @@@@ఐ +projectionsJ  @  @@ R @@  @@ *C@k@@Ab A@ KC@e0@ @@@@Ab A@ bC@_0        @ @@@@A$b A@ s q i@@?0@ $@@@@ "@ " !@ 7Aࠠ,analyse_expr4L!5L-@@@/which_variables e ^.specialised_to@@@Q C@?@@@?C@?@ !t@@@QC@? @@@UVC@?@@@Q*C@?@@?@@?@C@?0KJJKKKKK@ o  @ @nB@@@--2mL/nL>@@@50[ZZ[[[[[@B><@.'"@@?@@?@@?D@?@G@[@@@@@$exprL?LC@@@BC@UC@?0zyyzzzzz@ +W@#@\@@@@@ࠠ+projectionsMFLMFW@@@ ?#ref @@@?D@?@@@?D@?0@/%@&@]@@@డ o#refMFZMF]@@!a@!@@@q@@p,%makemutableAA @@@ ,, ,X@@ gҰ@@@+0.@@D@?@D@?)@@డ #Set%empty*ProjectionMF^MFr@ #@@@@ @ E@@EA@@5@@MB@@MFH @@@ࠠ4used_which_variablesNv|Nv@@@^m@@@?D@?@@@?D@?0@]rl@m@^@@@డ #refNvNv@\@@@y@@D@?@D@?@@డ (#Set%empty(Variable/Nv0Nv@@@@62@@E@@2.@@"@@8/@@9Nvx @@@ࠠ3check_free_variableDOEO@@@@ ?@@@?D@?@@@@HD@?@@?D@?0A@@AAAAA@Na[@\@d_@@@@#vardOeO@@@0RQQRRRRR@(kOlRMT@@@@@డ w#Map#mem(Variable~PP@@ u@@@@ !a@@@@$boolE@@@@@@@@ y@ uG@@@ @@D@?@ Ǡb@@D@?@@D@?@D@?@D@?0@@L^@C@a@@@@ఐT#varPP@@@l@@ఐW/which_variablesPP@2@@@@G@@@@D@?E@?%@డ":=QQ!@@7!a@{@@@w@$unitF@@@v@@u@@t*%setfield0BA.@@@@-dd.d@@ ԰@@@Sb@@D@?D@?@@D@?@@@D@?@D@?@D@?]@@ఐ4used_which_variables Q Q@@@r@@E@?E@@E@?r@@డ ##Set#add(Variable*Q"+Q2@@@@@6?@@@@6>@@@6=@@6<@@6;@@H@@@@@E@@ @@@E@@ @@E@@@E@@@E@@@@ఐ#varSQ3TQ6@@@ @@డ!!bQ7cQ8@@Š!a@~@@@s@@r'%field0AA@@@@@ Ӱ@@@ؠ@@F@@F@@EF@@:@@F@@;@F@@9@@ఐ4used_which_variables,QL@8.@@@@G@@@G@@CG@@A@@8 @@@@q @@@@D@@@@P4@@PE@?@@P8@@TD@?@@AC;A@@^Y@@@J0@B@@@@@@@ࠠ(for_exprTZ`TZh@@@@$expr@@@@QD@@Ls@@@AQD@@M@@@ND@@K0@s@@`@@@@$expr@TZjTZn@@@@@@R0@,TZ\n[y@@@@  @г)'Flambda+TZqTZ}@@2@@@@O@@TZiTZ~@@@9@@ఐ-$exprUU@*@-@ c@@G@@@@W0@-;@@@Ġ#VarVV@8#Var@@@@ !t@@@@A@AO@A ]AC ]AV@@@ iࠠ#var/V0V@@@ !t@@@@kG@@`0%$$%%%%%@3@@@@@' @@@@H@@a@@@Ġ+Let_mutableGWHW@8+Let_mutable2@ +let_mutable@@@@ABAO@A _km _k@@@ kঠ-initial_value_W`W@,-initial_value@@@62@@@3@A,#var 0Mutable_variable!t@@@2@@ @A  U W  U p@@ 2K,-contents_kind&Lambda*value_kind@@@4@B@A      @@ @M,$body%;@@@5@C"@A      @@ IN@A ! q s " q @@ MLj#varWW@@@ga@@@WW@@T@@H@@mH@@li@@@]@@@@H@@nm@@m@@ @@@@G@@pq@@ఐp3check_free_variableXX@@@@@@E@AKj@@E@AJ@E@AI0@@@d@@@@ఐ#varXX@@@@@F@AXF@AW@@"@@D@AG@Ġ%Apply] ]@8%Apply@ %apply@@@@ADAO@A b b @@@ m@]]@@@@G@@y@@@@@=@@G@@z@@@@ภ"()]]@8GQ@@@U@@@@A@@A@@J@ @@KD@AdD@Ab@Ġ$Send^^"@8$Send@ $send@@@@AEAO@A c   c @@@ nঠ$meth2^%3^)A,$meth@@@ !t@@@@A,$kind )meth_kind@@@@@ @A z   z  @@S,#obj !t@@@@B@A |   |  @@U,$args$$listI !t@@@@@@@C(@A }   }  @@%V,#dbg7)Debuginfo!t@@@@D6@A~  ~  @@3W@A {   {  @@7TࠠPQPO@@I@@@@0pooppppp@~@@@#obj^+^.ABࠠ@@E@@@@@$args^0^4AFࠠ@@IF@@@@@@@@%@@A^#^9@@@@G@@G@@-@@@@@@@G@@1@@1@@ఐ}3check_free_variable_=C_=V@@@@@@F@Akw@@F@Aj@F@Ai0@QO@P@eB@@A@f42@3@g@@@@ఐ]$meth_=W_=[@@@@@G@AxG@Aw@@(@@@@E@AF@Aq"@ఐ3check_free_variable`]c`]v@1@@@@@F@A@@F@A@F@A8@@ఐz#obj`]w`]z@>@@@@G@AG@AJ@@@@@@E@AF@AP@డ$List$iter(a|)a|@@@!a@C$unitF@@@C@@C@$listI@@@C@@@C@@C@@C@(list.mliEEEo@@,Stdlib__ListS%$@@@@E@@E@EE@D#@@E@D@E@D@  @@E@D@@E@D@E@D@E@D@@ఐ(3check_free_variablela|ma|@@@@c@@F@E"@@F@E@F@E@@ఐݠ$argsa|a|@@@M:@@F@DF@E F@E @@e @@D@D@@@@@@D@Af@Ġ&Assignbb@8&Assign@a&assign@@@@AFAO@A:d;d0@@@foঠ)new_valuebbA,)new_value@@@h!t@@@@A,.being_assigned Y!t@@@@@ @A]t  ^t  9@@P@Aau : <bu : S@@Qࠠ#$#"@@@@@@0@@@@@Abb@@?@@G@@G@@ @@@H@@(@@G@@ @@ @@ఐ3check_free_variablecc@)@@@@@E@E@@E@E@E@E0@)'@(@ h@@@@ఐ1)new_value c c@@@@@F@E"F@E!@@"@@RD@ED@E@Ġ,If_then_else%d&d@8,If_then_else@!t@@@@@@@@@@CGAO@Ae13e1W@@@pࠠ#varDdEd@@@!t@@@@H@@0:99:::::@H@@@@SdTd@@@@I@@ @@[d\d@@@@I@@@@@<ad@@@@I@@@@@Ġ&Switchme ne @8&SwitchX@!t@@@8&switch@@@@BHAO@AfXZfXy@@@=qF#vare e @@@EG@@>@@e e @@@@I@@F@@@)e @@@@I@@K@@K@@v@@@@H@@O@Ġ-String_switchf%f2@8-String_switch@b@@@U&stringO@@@ p@@@ @@@@@cy@@@ @@@ @CIAO@A]gz|^gz@@@r#varf4f7@@@@@f9f:@@.-@@H@@Π@@H@@@H@@@@H@@@@f<f=@@.@@H@@@@H@@@@@Rf>@@<@@H@@@@@@@@@@@G@@@@ఐŠ3check_free_variable gBH gB[@A@@@@@E@E0@@E@E/@E@E.0@@@"i@@@@ఐޠ#var"gB\#gB_@@@@@F@E=F@E<@@"@@jD@E6D@E,@Ġ,Static_raise9h`f:h`r@8,Static_raise$@0Static_exception!t@@@ !t@@@@@@@BJAO@Ai i@@@@s@Zh`t[h`u@@@@G@@0JIIJJJJJ@X@@@ࠠ$argsgh`whh`{@@@#"@@@@@@@@@@@9rh`|@@@@G@@@@@@డ5$List$iterii@Z@@@@}@@E@EgE@EM[@@E@EO@E@EN@X @@E@ELU@@E@EK@E@EJ@E@EI0@93@4@j@@@@ఐd3check_free_variableii@@@@@@F@Ed^@@F@Ec@F@Eb@@ఐV$argsii@#@@>@@F@E[F@EjF@Eh.@@G @@D@EZD@EG3@Ġ#Forjj@8#For@(for_loop@@@@ANAO@Atmum@@@wঠ*from_valuejjA,*from_value@@@d!t@@@`@A,)bound_var !t@@@_@@ @AW?j?lW?j?@@g,(to_value!t@@@a@B@AY??Y??@@i,)direction$(Asttypes.direction_flag@@@b@C#@AZ??Z??@@j,$body2@@@c@D,@A[??[??@@k@AX??X??@@hࠠFGFE@@?@@@@1@(to_value>j?jA7ࠠ@@:@@@@A@@AIjJj@@q@@G@@G@@I@@@z@@@@G@@M@@M@@ఐ3check_free_variable_k`k@@@@V@@F@Eu@@F@Et@F@Es0UTTUUUUU@e;9@:@yk-+@,@{l@@@@ఐE*from_value{k|k@@@r@@G@EG@E@@%@@4@@E@EF@E{@ఐN3check_free_variablell@ʰ@@@@@E@EH@@E@E@E@E3@@ఐa(to_valuell@:@@@@F@EF@EE@@@@D@EH@T @@D@EpK@Ġ#Letm!m$@8#Let@(let_expr@@@@AAAO@Af^WYg^Wj@@@j@m%m&@@@@L@@@@@@@$@@L@A@@@Ġ'Let_recm)m0@8'Let_rec@!t@@@%named@@@@@@@@@@@@BCAO@A``@@@l@m1m2@@"!@@L@A @@L@A @L@A @@L@A @@@@@L@A@@@;@@j@@L@A#@@#@@b@@n@@K@A'@Ġ,Static_catch6m57mA@8,Static_catch!@!t@@@!t@@@@@@ @@@ @@@@DKAO@AjACjA@@@t@]mB^mC@@$@@K@A[@@@"!@@K@A@@K@Ad@@@ @@K@Ai@@@ %@@K@An@@@@@@@@K@Ar@@r@@@@@@J@A v@Ġ%WhilemFmK@8%Whilep@ =@@@ A@@@@BMAO@A$l%l@@@Pv@mLmM@@ N@@J@A'@@@ S@@J@A(@@@ @@@@J@A)@@@@@@@@I@A*@Ġ(Try_withmPmX@8(Try_with@ k@@@h!t@@@ v@@@@CLAO@AYkZk@@@u@mYmZ@@ @@I@A2@@@@@I@A3@@ @ @@I@A4@@@+@@!@@I@A5@@@@@@%@@H@A6@Ġ2Proved_unreachablen[an[s@82Proved_unreachable@@@@AO@Ann@@@x@@  @@:@@H@A;@@@@2 @@>@@G@A<@@ภn[w$@@%@@DD@ED@E@@A U+@@HD@@U0@@@@@A/A@@VN@@J0@6@@@@4@@ࠠ)for_named`pp@@@@A%named@@@JD@JJ@@@L]D@J@@JD@J0@i|@}@>b@@@@%namedb@>p?p@@@@@J0.--.....@,GpHi{@@@@  @г)'Flambda+UpVp@@2@@@J@@\p]p@@@9@@ఐ-%namedgqhq@*@-@up@@G@@@J0ZYYZZZZZ@-;@@@Ġ+Project_var{r|r@8+Project_var@@@+@B+project_var@@@%@AH@K@A#%#A@@@GAࠠ+project_varcrr@@@@@@J0@+@@@@@!@@w@@G@J@@@డ#Map#mem(Variabless@ 1@@@@@E@L@ C@OC@NC@MC@MUC@LC@L@@E@L 8@@E@L@E@L@E@L0@]=7@8@s@@@@ఐG+project_varss@@@[@@F@L&@'closuress @e @@@@F@L+F@L)"@@ఐ /which_variablesss@ h@@ /@@L@@ 6@@E@LNF@L5@డ 5 7t!3 t!5@ 4@@@ kL@@E@L`E@LS@@E@LT@ 5@@E@LR@E@LQ@E@LPP@@ఐ +projections%t!'&t!2@ @@ @@F@L^F@LaF@L_e@@డ #Set#add*ProjectionBu6>Cu6P@@@@@@@@@@@@@@@@@@H@@@@@F@Lk@@@F@Lj@@F@Li@F@Lh@F@Lg@@ภ+Project_varju6Rku6]@Uఐࠐ+project_vartu6^uu6i@@@@@G@L@@{u6Q|u6j@@>@@G@LG@L@@డC , .u6ku6l@ +@@@ @@G@L~G@LG@L@@G@L@G@L@@ఐ +projectionsu6w@ @@ @@H@LH@LH@L@@% @@@@q @@@@E@L}@@@@D@L @Ġ/Project_closurevx~vx@8/Project_closureH@/project_closure@@@#@AF@K@A`a@@@ࠠ/project_closuredvxvx@@@@@@J0@p@@@@@@@@@G@J@@@డ#Map#mem(Variableww@ v@@@@@E@L@&C@@E@L r@@E@L@E@L@E@L0@2,@-@t@@@@ఐ|BA8@@R@B@AA@AE@@ࠠ#varxA@@@]@@@K @Ġ"[] A8@@@@AA@AZ@@@@A@ m@@G@K@@G@K1@@@=&@@wv@@G@K@@G@K:@ࠠ$_dbgyDH@@@|@@@KG@@@I@@@@G@KL@@L@డ#Map#mem(VariableJWJg@ M@@@@@E@M@@@E@M I@@E@M@E@M@E@M0@p{u@v@v\W@X@w82@3@x@@@@ఐf#varJhJk@@@@@F@N F@N@@ఐ/which_variablesJlJ{@s@@)@@;@@ A@@E@N,F@N/@డ @ B@ ?@@@vW@@E@N>E@N1@@E@N2@ @@@E@N0@E@N/@E@N.J@@ఐ+projections01@'@@@@F@N @@ =@@@@@G@N\G@NG@N@@G@N@G@N@@ఐ+projections@@@@@H@NH@NH@N@@% @@@@x @@@@E@N[@@@@D@N;D@M@Ġ/Set_of_closures@8/Set_of_closures\@/set_of_closures@@@"@AE@K@Atu@@@~ࠠ/set_of_closuresz@@@@@@K0@@@@@@@@@@G@K@@@@@ࠠ2aliasing_free_vars| @@@/@@@NF@N@@@NF@N0@)#@$@y@@@డ#Map&filter(Variable#'$:@@@@@@&@!a@,@@@%@@$@@#@a @@@"e@@@!@@ @@@$@ T @@@@9@@F@N@B@@F@N@F@N@F@N@yJ@@F@N}N@@F@N@F@N@F@N0DCCDDDDD@I@@@@@%param~@e@fA@@Y@@I@N@@@'spec_to}@tCuJ@@4@@@N @  @г<'Flambda>Mc@@E@@@N1@@Bd@@@5@@డ#Map#mem(Variablehth@@@@@@G@N@Ϡ@@G@N@@G@N@G@N@G@N0@D;@>@{@@@@ఐN'spec_tohh@@@@@H@N@N@#varhh@}@@@@H@NH@N$@@ఐr/which_variableshh@M@@1@@C@@@@G@OG@O7@@AZ A@@@@G@O@G@OG@O@@A;h@@@@@G@N@@@G@N@G@N@G@NG@O@@ఐ/set_of_closures @@@1@@G@O,@O)@)free_vars@,)free_vars<@@@>#Map!t@@@9@@@8@A,.function_decls5function_declarations@@@7@@@@$$$%@@O,0specialised_args#Map!t@@@;@@@:@B@@((((@@Q,6direct_call_surrogates/#Map!t!t@@@=@@@<@C/@@3%3'3%3Z@@R@@'a'c'a'@@PWJ@@DXG@O+@@G@O* @@CQ@@_V@@gS@@@ࠠ9aliasing_specialised_argsrs@@@.specialised_to@@@OF@OL@@@OjF@OG0nmmnnnnn@t@@z@@@డ#Map&filter(Variable@s@@@@@@F@OQ@(o@@F@OP@F@OO@F@ON@Ϡ0@@F@OMӠ4@@F@OK@F@OJ@F@OI0@,@@@@@V@@@@@I@O@@@'spec_to@ @@O@@@O@  @гW'FlambdaY#9@@`@@@O0@@:@@@g4@@డ#Map#mem(Variable>J>Z@t@@@@@G@O@$9@@G@Op@@G@O@G@O@G@O0@D;@>@ }@@@@ఐN'spec_to >[ >b@@@@@H@O@O@#var >c >f@Ұ@@@@H@OH@O$@@ఐǠ/which_variables 1>g 2>v@@@1@@C@@@@G@OG@O7@@AZ A@@ @@G@O@G@OG@O@@A C D>w@@@;@@G@Oo@@@G@On@G@Om@G@OlG@O@@ఐp/set_of_closures ]x ^x@M@@@@G@O@O@0specialised_args ix jx@8@@7G@O@@G@O@@ @@@@ t @@@ࠠ-aliasing_vars  @@@G@@@PXF@P@@@P6F@O0 x w w x x x x x@ !@@ |@@@డ#Map.disjoint_union(Variable  @"eq&optionJ@!a@k@$boolE@@@@@@@@@@%print@l&Format)formatter@@@@$unitF@@@@@@@@@@@+@@@@1@@@ 5@@@@@@@@@@@@@WGF@@DB@g@i;@@F@P@F@P@F@P@@F@P8O@6@@F@P @y2@@F@P @F@P @F@P @@F@P @.@@F@P@4@@F@P8@@F@P@F@P@F@P@F@P@F@P@qภ$None 8 v  @@T@@@@AA@A @@ y@ @{@@t@@G@PK@G@PJ@G@PI@@G@PH@qภ @ @@s@@G@PP@o@@G@PO@G@PN@G@PM@@G@PL@@ఐI2aliasing_free_vars!K!L@Ȱ@@v@@G@PW@@ఐꠐ9aliasing_specialised_args!\!] @ϰ@@G@Ps@@G@Pr@@ @@@@!g @@డ (#not!s*3!t*6@@@@@F@@@E@@D(%boolnotAAŠ@@@""""@@ \@@@@@E@P@@E@P@E@P0!|!{!{!|!|!|!|!|@@@!~@@@@డ#Map(is_empty(Variable!*8!*M@@Ԡ!a@@@@$@@@@@@@F@@@@@F@PF@P@@F@P@@F@P@F@P7@@ఐS-aliasing_vars!*N!*[@A@@@@G@PH@@!*7!*\@@h@@F@PF@PG@PR@@q @@@@E@PF@PX@డ#Map$iter(Variable!hp!h@@@@@@@!a@R$unitF@@@@@@@@ 8@@@ @@@@@@@@@P"!@@@@@@E@P@ A4function_declaration@@E@PE@P#@@E@P@E@P@E@P@ X@@E@P @@E@P@E@P@E@P@@@@"Ah"Bh@@5@@H@P@@@(fun_decl@"Ph"Qh@@-@@@P@  @г5'Flambda7"ah"bh@@>@@@Pհ@@"hh"ih@@@E@@@@"s"t@@ C@P0"a"`"`"a"a"a"a"a@0'@*@"@@@ࠠ$used""@@@+C@QC@P@@@@@@P@ఐa,analyse_expr"%"1@%@@a_@QJE@G@P@G@P@G@P*@iఐ+-aliasing_vars"Q"^@@@ ՠn@@C@Q ;@@ఐq(fun_decl"2":@G@@4function_declaration@@H@Q@QQ@$body";"?@,$body @@@Q@@@H@B,,.closure_origin .Closure_origin!t@@@E@@ @@r.8c8es.8c8@@W,¶ms)Parameter!t@@@G@@@F@A@@/88/88@@X*,.free_variables*#Set!t@@@I@C,@@39 939 9.@@Z,,free_symbols8&Symbol#Set!t@@@J@D<@@7::7::.@@[,$stubH$boolE@@@K@EH@@;::;::@@\,#dbgT!t@@@L@FT@@@<(<*@<(<<@@],&inline`0inline_attribute@@@M@G`@@B@@H@Q?@H@Q=@H@Q<0########@<4P@@@Q5@.@#A@@@@ఐ?#var##@@@a@@I@QO@@ఐ~-aliasing_vars##@l@@"(+@@I@Qc(@@<@@/)@Ġ)Not_found$$@ @@@@#N@@J@Q|0$##$$$$$@9@@@$@@@@I@Q}@@ภ $"$#@ @@@ @@H@Q@$)@@@@H@QH@Q@ࠠ'spec_to$9$:@@@@@@Qc@@@@I@Qf@@ఐ3check_free_variable$K$L-@@@@!B@@H@Q@@H@Q@H@Q0$A$@$@$A$A$A$A$A@{#@@$dB@@@@ఐ-'spec_to$f.$g5@@@ *@@I@Q@Q@#var$r6$s9@ %@@!i@@I@QI@Q$@@0@@QH@Q'@@A$~ @@@@G@QG@Qo@@A$l$:@@@@@G@Q-@@G@Q,@G@Q+G@Q0$|${${$|$|$|$|$|@@@@@ఐ$used$;G$;K@@@@@,@@@@F@QG@Q)@B @@@@F@QF@Q5@@ADA@@@@F@Q@F@QF@Q0$$$$$$$$@"@@@@A$h$;L@@@!@@F@P@@@F@P@F@P@F@PF@Q@@ఐ䠐/set_of_closures$MW$Mf@@@@@G@Q@QH@.function_decls$Mg$Mu@@@@@F@Q@QT@$funs$Mv$Mz@,$funs@@@D #Map!t6@@@C@@@B@C,/is_classic_mode@@@?@@@@ 55 55(@@ S,2set_of_closures_id2Set_of_closures_id!t@@@@@A@@ 55 55@@ T,6set_of_closures_origin*6Set_of_closures_origin!t@@@A@B#@@ #6T6V #6T6@@ U8@@ (7z7| (7z7@@ VW>@@8F@Q@@F@Q@@%/*b%0{@@ D@QF@P@@%6*0@@@@@@ @@@ @@ D@N,@Ġ$Prim%F%G@ )@%K%L@@ +@@G@K @ࠠ$vars{%W%X@@@ / .@@@K@@@K @@%d%e@@ /@@G@K @@@$%j@@ F@@G@K @@ @@డ$-$List$iter%z%{@R@@@@"u@@E@R E@QS@@E@Q@E@Q@P @@E@QM@@E@Q@E@Q@E@Q0%}%|%|%}%}%}%}%}@ $A;@<@%C@@@@ఐ\3check_free_variable%%@ذ@@@"@@F@R V@@F@R @F@R@@ఐ^$vars%%@#@@>@@F@RF@RF@R.@@G @@ D@RD@Q3@Ġ&Symbol%%@8&Symbol d@!t@@@@A@@K@A!}r<>!~r<R@@@!y@%%@@@@O@K @@@@@ @@O@K @@ @Ġ%Const&&@8%Const @!%const@@@@AA@K@A!sSU!sSe@@@!z@&&@@@@O@K @@@@@ @@O@K @@ @@@ @@ @@N@K @Ġ/Allocated_const&*&+@8/Allocated_const @/Allocated_const!t@@@@AB@K@A!tfh!tf@@@!{@&?&@@@@@N@K @@@@@ @@N@K @@ @@j @@$@@M@K @Ġ,Read_mutable&T&U@8,Read_mutable @!t@@@@AC@K@A!u!u@@@"|@&g&h@@@@M@K @@@@@H@@M@K@@@@ @@L@@L@K@Ġ1Read_symbol_field&| &}@81Read_symbol_field@y!t@@@ #intA@@@!@BD@K@A"!v""v@@@"M}@&& @@@@L@K,@@@@@L@K1@@@% @@|@@L@K5@@5@@@@@@K@K9@Ġ+Project_var&#&.@5@&/&0@@4@@K@KK@@@ @@@@K@KO@@O@@ @@@@J@KS@Ġ/Project_closure&3&B@ @&C&D@@ @@J@Ke@@@ @@@@J@Ki@@i@@ @@@@I@Km@Ġ;Move_within_set_of_closures&EK&Ef@ @&Eg&Eh@@ @@I@K@@@ @@@@I@K@@@@ @@@@H@K@Ġ$Expr&io&is@8$Expr@@@@*@AJ@K@A""@@@"E@'it'iu@@@@H@L@@@@@@@H@L@@@@9 @@@@G@L@@ภ' iy@@@@D@RD@R@@A''q@@D@J0''''''''@@@@@AA@@ @@R0''''''''@@@@@@డ1Flambda_iterators-iter_toplevel1Flambda_iterators'?'@@@@'Flambda!t@@@T$unitF@@@T@@T@@%named@@@T@@@T@@T@!t@@@T@@@T@@T@@T@@T@ (middle_end/flambda/flambda_iterators.mliL  P s |@@1Flambda_iteratorsG65@@@@3@@D@U.@@D@U@D@U@@+@@D@U(@@D@T@D@T@'@@D@T$@@D@T@D@T@D@T@D@T0'|'{'{'|'|'|'|'|@b{u@v@'o@@@@ఐ렐(for_expr''@o@@@@@E@U#U@@E@U"@E@U!@@ఐ)for_named''@#@@@@@E@U/@@E@U.@E@U-.@@ఐE$expr''@@@A;@@@@}@@C@U6D@UA@@ࠠ+projections''@@@&@@@UBD@U70''''''''@S@@@డ&''@@@@PD@U:@@D@U;@D@U9@@ఐe+projections(@@@f@@E@U@E@UCE@UA(@@  @@)@@( @@@ࠠ4used_which_variables((@@@@@@UPD@UE0( ( ( ( ( ( ( ( @KE@F@(/D@@@డ&̠ΰ(-(.@˰@@@D@UH@@D@UI@D@UG@@ఐG4used_which_variables(B@@@@@E@UNE@UQE@UO+@@  @@,@@(N @@ఐ}+projections(Y(Z#@8@@0(G(F(F(G(G(G(G(G@<IC@D@(jE@@@ఐO4used_which_variables(h%(i9@ @@C@UW@@@@@C@UX@% @@R@f @@@6 @@@/ @@F@@@ @ @@ "@@@@ p@@@,C@UUC@?@@AA@:C@?C@?0(n(m(m(n(n(n(n(n@@@@@A(L.A@OM?@@U\0(s(r(r(s(s(s(s(s@@@@@(L"@@#@,@ࠠ2from_function_decl(;?(;Q@@@#env&@@@UC@Ua/which_variables&ՠ&@@@UC@U@@@UC@Ug-function_decl&4function_declaration@@@UrC@Um'@@@VC@Un@@UoC@Uh@@UiC@Ub@@UcC@U`Y@--2(;S(;V@@@50((((((((@fC(;;(!!.@@@@@44 9(;X(;g@@@<0((((((((@J@@(G@@@@33à@(hp(h}@@8@@@Us0((((((((@Q@@)H@@@C  @ гD'FlambdaF) h) h@@M@@@Up@@@@@R@@@ࠠ+projectionsĠ))@@@'\@@@UD@Ux0))))))))@-:2@5@)3I@@@ࠠ4used_which_variablesŠ)0)1@@@ @@@UD@Uy@@@@ @@U|@ఐ,analyse_expr)F)G@ְ@@'s @@D@U@@D@U@@@D@U'@@D@U @@D@U@D@U@D@U@D@U~<@*ఐ/which_variables)k)l@r@@I@@ఐ-function_decl)z){@U@@@@E@U@U]@$body))@@@@@@E@UE@UE@Uk@@K @@ZD@Un@@)@@@ࠠ+projectionsƠ))@@@'@@@UD@U0))))))))@@@)Jz@{@)K@@@ఐ( 7known_valid_projections))@W@@((@@D@U''@@D@U'''@@D@U@@D@U(@@D@U@D@U@D@U@D@U)@(ఐ #env))@@@=6@(ఐʠ+projections))@?@@((@@E@UE@UE@UJ@(ఐ/which_variables))@@@SW@@H@@[X@@*@@డ'#Set&filter*Projection* l n* l @'ְ@@@@'@@C@V'@@C@V@C@V@(Y@@C@V(\@@C@V@C@V@C@V0********@@@*3L@@@@@*projectionǠ*6 l *7 l @@@'@@E@V+@@@ࠠ/projecting_fromȠ*F  *G  @@@'@@@V9E@V/0*9*8*8*9*9*9*9*9@*"(@@@V*@@*_M@@@డ(+/projecting_from*Projection*a  *b  @'@@@'@@E@V3'@@E@V2@E@V1@@ఐD*projection*v  *w  @(@@(8@@F@V;.@@@@2/@@*~  @@డ)=#not*  *  @ @@@ @@D@VE @@D@VD@D@VC0*~*}*}*~*~*~*~*~@FSM@N@*N@@@@డ'#Set#mem(Variable*  *  @"@@@"@@E@VR@"@@E@VQ"@@E@VP@E@VO@E@VN&@@ఐ}/projecting_from*  * !@0@@"9@@F@VdF@Vc8@@ఐ4used_which_variables* !* !@+@@"D@@F@V]F@VrF@VqL@@*  * !@@ n@@E@VLE@VtF@V\V@@b @@(@@D@VvE@VK\@r@@(@@D@VxD@Vw@@A* l * !@@@(@@D@V(@@D@V@D@VD@Vz0********@@@@@ఐn+projections+ !!#4@5@@)M@@D@VD@VD@V@@=@@Q@>@@Rq@?@@UC@Uv@@A+hnCA@gC@Ul0+ + + + + + + + @&@@@@A+!;WHA@}C@Uf0++++++++@=@@@@A+&;RMA@@@V0++++++++@T@@@@R@RQ@@)A)@))@@)A)@));@@)@@@@+CF@@0+$+#+#+$+$+$+$+$@@@#env7Inline_and_simplify_aux#Env!t@@@V/which_variables(Variable#Map!t'Flambda.specialised_to@@@V@@@V-function_decl 4function_declaration@@@V*Projection#Set!t@@@V@@V@@V@@V@ *middle_end/flambda/extract_projections.mli]a6K@@3Extract_projections@@ H************************************************************************+A@@+A@L@ H +BMM+BM@ H OCaml +C+C@ H +D+D3@ H Pierre Chambart, OCamlPro +E44+E4@ H Mark Shinwell and Leo White, Jane Street Europe +F+F@ H +G+G@ H Copyright 2013--2016 OCamlPro SAS +H+Hg@ H Copyright 2014--2016 Jane Street Group LLC +Ihh+Ih@ H +J+J@ H All rights reserved. This file is distributed under the terms of +K+KN@ H the GNU Lesser General Public License version 2.1, with the +LOO+LO@ H special exception on linking described in the file LICENSE. +M+M@ H +N+N5@ H************************************************************************+O66+O6@  CR-soon pchambart: should we restrict only to cases when the field is aliased to a variable outside of the closure (i.e. when we can certainly remove the allocation of the block) ? Note that this may prevent cases with imbricated closures from benefiting from this transformations. mshinwell: What word was "imbricated" supposed to be? (The code this referred to has been deleted, but the same thing is probably still happening). +W+`@ We could check that [move.move_to] is in [value_set_of_closures], but this is unnecessary, since [Closure_id]s are unique. +@ 9 C+A  @  CR-soon mshinwell: We don't handle [Apply] for the moment to avoid disabling unboxing optimizations whenever we see a recursive call. We should improve this analysis. Leo says this can be done by a similar thing to the unused argument analysis. +Y+\@ < We ignore projections from within nested sets of closures. ++@ We must use approximation information to determine which projections are actually valid in the current environment, other we might lift expressions too far. ++@ Z Don't extract projections whose [projecting_from] variable is also used boxed. We could in the future consider being more sophisticated about this based on the uses in the body, but given we are not doing that yet, it seems safest in performance terms not to (e.g.) unbox a specialised argument whose boxed version is used. +  + 2 k@@*./ocamlopt"-g)-nostdlib"-I&stdlib"-I1otherlibs/dynlink0-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(toplevel2-function-sections"-c,("-I2middle_end/flambda,+ 3/home/barsac/ci/builds/workspace/step-by-step-build 0/$#"! @0[<`70,,,+,+,,,,,,,,,,@,*@@/Allocated_const08UYwBkc6@.(Asttypes0'$O~7,Backend_intf0;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$@@AE@+,@@++@@@@@@c@@@@@@f@:+@@P-@@n@@A