Caml1999I037:M )(i7Inline_and_simplify_auxӠ#EnvX@!t_;@@@A@@@@@ .middle_end/flambda/inline_and_simplify_aux.mliXuwXu}@@@@@@A@&create`,never_inline$boolE@@@(@@)'backend,Backend_intf!S@@*@@+%round#intA@@@,@@-(ppf_dump&Stdlib&Format)formatter@@@.@@/G@@@0@@1@@2@@3@@4@D` Ee@@UA@@'backenda@@@@5@@68!S@@7@@8@Zi  [i 7@@kB@@4really_import_approxb@'@@@9@@:@3Simple_value_approx!t@@@;@@<!t@@@=@@>@@?@|l}n@@C@@%roundc@I@@@@@@Ab@@@B@@C@q  q  0@@D@@(ppf_dumpd@]@@@D@@Ej&Format)formatter@@@F@@G@t z |t z @@E@@#adde@t@@@H@@I@(Variable!t@@@J@@K@Y!t@@@L@@M@@@N@@O@@P@@Q@y I Ky I @@F@@/add_outer_scopef@@@@R@@S@)!t@@@T@@U@!t@@@V@@W@@@X@@Y@@Z@@[@{  {  @@G@@+add_mutableg@@@@\@@]@0Mutable_variable!t@@@^@@_@!t@@@`@@a@@@b@@c@@d@@e@ ~  !~  D@@1H@@(find_exnh@@@@f@@g@y!t@@@h@@i!t@@@j@@k@@l@@C  AC  J@@QI@@0find_mutable_exni@ @@@m@@n@I!t@@@o@@p!t@@@q@@r@@s@`F  aF  @@qJ@@%scopej;@@'CurrentO@@oH  pH  @@L@%OuterP@@xH  yH  @@M@@@A@@@@@|H  @@A@K@A@3find_with_scope_exnk@H@@@t@@u@!t@@@v@@w@6@@@y@1!t@@@x@@z@@{@@|@J  J  8@@N@@(find_optl@r@@@}@@~@!t@@@@@&optionLW!t@@@@@@@@@@@N  N  @@O@@-find_list_exnm@@@@@@@$listK+!t@@@@@@@@ !t@@@@@@@@@@@Q46Q4|@@ P@@-does_not_bindn@@@@@@@,U!t@@@@@@@@@@@@@@@@S~S~@@,Q@@0does_not_fresheno@@@@@@@Ox!t@@@@@@@@*@@@@@@@@>U?U@@OR@@*add_symbolp@ @@@@@@&Symbol!t@@@@@@!t@@@@@$@@@@@@@@@@gWhW'@@xS@@/redefine_symbolq@4@@@@@@)!t@@@@@@!t@@@@@K@@@@@@@@@@X(*X(k@@T@@/find_symbol_exnr@[@@@@@@P!t@@@@@:!t@@@@@@@@YlnYl@@U@@/find_symbol_opts@{@@@@@@p!t@@@@@ ^!t@@@@@@@@@@@ZZ@@V@@1find_symbol_fatalt@@@@@@@!t@@@@@!t@@@@@@@@[[1@@W@@3find_or_load_symbolu@@@@@@@!t@@@@@!t@@@@@@@@__@@$X@@.add_projectionv@@@@@@*projection*Projection!t@@@@@(bound_to|!t@@@@@@@@@@@@@@@@b;=Af@@QY@@/find_projectionw@ @@@@@*projection-!t@@@@@!t@@@@@@@@@@@gj  hmG_@@xZ@@#memx@4@@@@@@!t@@@@@q@@@@@@@@pp@@[@@*fresheningy@R@@@@@*Freshening!t@@@@@@uuwuu@@\@@.set_fresheningz@j@@@@@@!t@@@@@w@@@@@@@@xx@@]@@3activate_freshening{@@@@@@@@@@@@~  ~ ,@@^@@%local|@@@@@@@@@@@@@@_@@ "inside_set_of_closures_declaration}@6Set_of_closures_origin!t@@@@@@@@@@@@@@@@@@@@@`@@+at_toplevel~@@@@@@@@@@@@|~|@@%a@@0is_inside_branch@@@@@@@@@@@ @()@@9b@@,branch_depth@@@@ @@ @@@ @@ @<=@@Mc@@-inside_branch@ @@@@@ @@@@@@OP@@`d@@6increase_closure_depth@@@@@@@@@@@@bc@@se@@0set_never_inline@/@@@@@2@@@@@@uv@@f@@ set_never_inline_inside_closures@B@@@@@E@@@@@@XZX@@g@@ "unset_never_inline_inside_closures@U@@@@@X@@@ @@!@@@h@@ !set_never_inline_outside_closures@h@@@"@@#k@@@$@@%@hjh@@i@@ #unset_never_inline_outside_closures@{@@@&@@'~@@@(@@)@@@j@@,never_inline@@@@*@@+@@@,@@-@xzx@@k@@.inlining_level@@@@.@@/@@@0@@1@@@l@@1inlining_level_up@@@@2@@3@@@4@@5@@@ m@@2actively_unrolling@@@@6@@7@#!t@@@8@@9W@@@:@@@;@@<@@=@ 4@@0n@@8start_actively_unrolling@@@@>@@?@F!t@@@@@@A@@@@B@@C@@@D@@E@@F@@G@DtvEt@@Uo@@;continue_actively_unrolling@@@@H@@I@k!t@@@J@@K@@@L@@M@@N@abD@@rp@@1unrolling_allowed@.@@@O@@P@!t@@@Q@@Rk@@@S@@T@@U@@@q@@8inside_unrolled_function@L@@@V@@W@!t@@@X@@YY@@@Z@@[@@\@ o q o @@r@@0inlining_allowed@i@@@]@@^@.Closure_origin!t@@@_@@`@@@a@@b@@c@!!!!L@@s@@7inside_inlined_function@@@@d@@e@ !t@@@f@@g@@@h@@i@@j@!!!!@@t@@5note_entering_closure@@@@k@@l*closure_id*Closure_id!t@@@m@@n#dbg)Debuginfo!t@@@o@@p@@@q@@r@@s@@t@"" #N#V@@u@@2note_entering_call@@@@u@@v*closure_id/!t@@@w@@x#dbg-!t@@@y@@z@@@{@@|@@}@@~@3$^$`4$$@@Dv@@5note_entering_inlined@@@@@@@@@@@@F%%G%%@@Ww@@9note_entering_specialised@@@@@@+closure_idsn#Set!t@@@@@$@@@@@@@@g&&h&&@@xx@@-enter_closure@4@@@@@*closure_id!t@@@@@-inline_insidey@@@@@#dbg!t@@@@@!f@c@@@@@!a@@@@@@@@@@@@@@@@((((@@y@@/record_decision@w@@@@@@4Inlining_stats_types(Decision!t@@@@@$unitF@@@@@@@@):)<))@@z@@%print@&Format)formatter@@@@@@@@@@@!@@@@@@@@))))@@{@@4set_inline_debuginfo@@@@@@#dbg!t@@@@@@@@@@@@@ ** **@@|@@5add_inlined_debuginfo@@@@@@#dbg%!t@@@@@+!t@@@@@@@@. +*+,/ +*+k@@?}@@@@2V$$3 +l+o@C~@@@Ӡ&ResultY@!t;@@@A@@@@@B,=,?C,=,E@@@@S@A@&create@@@@@@@@@@@@W,G,IX,G,_@@h@@@&approx@@@@@@!t@@@@@@m,,n,,@@~A@@*set_approx@'@@@@@@!t@@@@@4@@@@@@@@----@@B@@+meet_approx@D@@@@@@!t@@@@@@:!t@@@@@[@@@@@@@@@@".."..@@C@@6used_static_exceptions@k@@@@@0Static_exception#Set!t@@@@@@&/Y/[&/Y/@@D@@4use_static_exception@@@@@@@!t@@@@@@@@@@@@@)//)/0 @@E@@0exit_scope_catch@@@@@@@:!t@@@@@@@@@@@@@.00.01@@F@@'benefit@@@@@@-Inlining_cost'Benefit!t@@@@@@211 211@@0G@@+map_benefit@@@@@@@@"'Benefit!t@@@@@*'Benefit!t@@@@@@@@@@@@@@@J62628K922@@[H@@+add_benefit@@@@@@@I'Benefit!t@@@@@@@@@@@@@i=22j=23-@@zI@@-reset_benefit@#@@@@@&@@@@@@|A33}A33@@J@@6set_inlining_threshold@6@@@@@@Ѡ)Threshold!t@@@@@@@@ J@@@ @@ @@ @C33D34 @@K@@6add_inlining_threshold@Z@@@ @@@)Threshold!t@@@@@i@@@@@@@@E4 4F4,4S@@L@@6sub_inlining_threshold@y@@@@@@)Threshold!t@@@@@@@@@@@@@G4T4VH4s4@@M@@2inlining_threshold@@@@@@/)Threshold!t@@@@@@@@@I44I44@@ N@@7seen_direct_application@@@@ @@!@@@"@@#@ K44 K45@@ O@@7num_direct_applications@@@@$@@%@@@&@@'@ "L55 #L55,@@ 3P@@@@ & +q+q 'M5-50@ 7Q@@@:initial_inlining_thresholdZ%round @@@@@$)Threshold!t@@@@@@ AP5W5W BP5W5@@ RR@@ #initial_inlining_toplevel_threshold[%round &@@@@@?)Threshold!t@@@@@@ \S55 ]T56 @@ mS@@ #prepare_to_simplify_set_of_closures\#env!t@@@@@/set_of_closures'Flambda/set_of_closures@@@@@.function_decls5function_declarations@@@@@'freshen @@@@@6only_for_function_decl۠(4function_declaration@@@@@@@@@#Map!t@?.specialised_to@@@Ӡ@ O!t@@@@@@@@ՠ@ #Map!tX.specialised_to@@@@@@Ѡ@a5function_declarations@@@Ϡ@ %#Map!t y!t@@@@@@Π@ 5value_set_of_closures@@@̠@Z!t@@@@@@@@@@@@@@@@ V6"6" a8N8Y@@ T@@;prepare_to_simplify_closure]-function_decl4function_declaration@@@@@)free_vars ^#Map!t@.specialised_to@@@ߠ@ !t@@@@@@@@@@0specialised_args #Map!t.specialised_to@@@@@@@@8parameter_approximations #Map!t !t@@@@@@@@3set_of_closures_env!t@@@@@!t@@@@@@@@@@@@@@ mc8[8[ ni99@@ ~U@@/keep_body_check^/is_classic_mode l@@@@@)recursive P$Lazy!t #Set!t@@@@@@@@@ !t@@@@@@.4function_declaration@@@@@ @@@@@@@@@@@@ k99 p:):2@@ V@@@^7Inline_and_simplify_aux0E#X̕B,;x (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+L4Inlining_stats_types0)x0pukC\-Inlining_cost0i(wypP1 󰠠,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(MC7Inline_and_simplify_aux-ocaml.warning .middle_end/flambda/inline_and_simplify_aux.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@*ocaml.textn p Environments and result structures used during inlining and simplification. (See inline_and_simplify.ml.) ST"@@@@@@#Env0AV$+V$.@~@@БA+!tBXu|Xu}@@;@@@A@@@@@Xuw@)ocaml.doc 8 Environments follow the lexical scopes of the program. W57W5t@@@@@@@@@@@@@A@@@@@@@@3@@A#@&create` `@б,never_inlineг$bool a(a,@@ @@@{3@D>@A@@б'backendЙ,Backend_intf!S@,Backend_intf'b-D(b-P@ +b-Q,b-R@@@@|2b-<3b-S@@б%roundг#int?cTa@cTd@@ @@@}2@@б(ppf_dumpг&Format)formatterTdeuUde{@ Xde|Yde@@@@@@NL @@г!tfege@@ @@@OY@@'@@P@@Q^qdel @@>5@@R @@SdwcT[@@cN@@T @@Uj}b-4@@|s@@V @@Wpa@@@`  @  Create a new environment. If [never_inline] is true then the returned environment will prevent [Inline_and_simplify] from inlining. The [backend] parameter is used for passing information about the compiler backend being used. Newly-created environments have inactive [Freshening]s (see below) and do not initially hold any approximation information. Z_@@@@@@@A@@0@Y@@@@@@'backendi i @б@г᠐!ti i @@ @@@X3@8@A@@Й!S@,Backend_intfi (i 4@ i 5i 6@@@@Yi  i 7@@@#@@Z @@[ &@@@i   @ s Obtain the first-class module that gives information about the compiler backend being used for compilation. gh @@@@@@@B@@@@@@@@@?4really_import_approxll@б@г8!t m m@@ @@@\3@Xm8@A@@б@г3Simple_value_approx!t3Simple_value_approx#n$n@ 'n(n@@@@@@U @@г!t3Simple_value_approx9n:n@ =n>n@@@@@@V2 @@@@@W@@X7& @@@?@@Y @@Z<BNn@@@Ql@x C Obtain the really_import_approx function from the backend module. ^k9;_k9@@@@@@@kC@@@$@@@@@@\%rounduq  vq  %@б@г!tq  (q  )@@ @@@[3onnooooo@u8@A@@гO#intq  -q  0@@ @@@\@@@@@]@@^ @@@q   @Ð 1 Which simplification round we are currently in. pp @@@@@@@D@@@o@@@@@@3(ppf_dumpt z t z @б@г!tt z t z @@ @@@_3@La8@A@@г2&Format)formattert z t z @ t z t z @@@@@@` @@@ @@a@@b# @@@t z |@ @ Where to print intermediate asts and similar debug information s 2 4s 2 y@@@@@@@ E@@@'Ð@@@@@@<#add5y I Oy I R@б@гK!ty I U y I V@@ @@@c3  @Uj8@A@@б@г(Variable!t(Variable6y I Z7y I b@ :y I c;y I d@@@@@@R @@б@г-!t3Simple_value_approxNy I hOy I {@ Ry I |Sy I }@@@@@@S4 @@г!t`y I ay I @@ @@@TA@@@@@U@@VF @@@2@@W @@XK:@@@S@@Y @@ZPV@@@wy I K@ Add the approximation of a variable---that is to say, some knowledge about the value(s) the variable may take on at runtime---to the environment. v  x 3 H@@@@@@@F@@'@J@@@@@@o/add_outer_scope6{  {  @б@гҠ!t{  {  @@ @@@[3@8@A@@б@г!t(Variable{  {  @ {  {  @@@@@@\ @@б@г!t3Simple_value_approx{  {  @ {  {  @@@@@@]2 @@г!t{  {  @@ @@@^?@@@@@_@@`D @@@2@@a @@bI:@@@Q@@c @@dNT@@@{  @@G@@@@T+add_mutableK~  ~  @б@г>!t~  ~  @@ @@@e3@m@A@@б@г0Mutable_variable!t0Mutable_variable)~  *~  $@ -~  %.~  &@@@@@@* @@б@г !t3Simple_value_approxA~  *B~  =@ E~  >F~  ?@@@@@@+4 @@г!tS~  CT~  D@@ @@@,A@@@@@-@@.F @@@2@@/ @@0K:@@@S@@1 @@2PV@@@j~  @ ( Like [add], but for mutable variables. w}  x}  @@@@@@@H@@'@=@@@@@@o(find_exnLC  C  @б@гŠ!tC  "C  #@@ @@@33@8@A@@б@гz!t(VariableC  'C  /@ C  0C  1@@@@@@4 @@г!t3Simple_value_approxC  5C  H@ C  IC  J@@@@@@50 @@@@@6@@75& @@@=@@8 @@9:@@@@C  @ Find the approximation of a given variable, raising a fatal error if the environment does not know about the variable. Use [find_opt] instead if you need to catch the failure case. @ F HB  @@@@@@@I@@#@@@@@@@Y0find_mutable_exnMF  F  @б@г6!t F   F  @@ @@@:3@r8@A@@б@г!t0Mutable_variableF   F  @ #F  $F  @@@@@@; @@г!t3Simple_value_approx5F  6F  @ 9F  :F  @@@@@@<0 @@@@@=@@>5& @@@=@@? @@@:@@@@LF  @s - Like [find_exn], but for mutable variables. YE L NZE L @@@@@@@fJ@@#@@@@@@@YA+%scopeNCqH  rH  @@;@@'CurrentO@@{H  |H  @@L@%OuterP@@H  H  @@M@@@A@@@@@H  @@A@K@@#@@@@@#H  @@@@@@A@@@3@N@A@3find_with_scope_exnQJ  J  @б@гؠ!tJ  J  @@ @@@G3@F@@A@@б@г!t(VariableJ  J  @ J  J  @@@@@@H @@В@гf%scopeJ  J  @@ @@@I+@@@г!t3Simple_value_approxJ  #J  6@ J  7J  8@@@@@@JC @@@@ @ @@KJ% @@@8@@L @@MO@@@@W@@N @@OTZ@@@J  @@N@@@@Z(find_optRN  N  @б@гJ!tN  N  @@ @@@P3        @s@A@@б@г!t(Variable3N  4N  @ 7N  8N  @@@@@@Q @@г&optionEN  FN  @г2!t3Simple_value_approxSN  TN  @ WN  XN  @@@@@@R: @@@ @@@T?@@@-@@U @@VD5"@@@L@@W @@XIO'@@@oN  *@ y Like [find_exn], but intended for use where the "not present in environment" case is to be handled by the caller. |L : <}M  @@@@@@@O@@:@B@@@@@@h-find_list_exnSQ4:Q4G@б@гʠ!tQ4JQ4K@@ @@@Y3@8@A@@б@г $listQ4ZQ4^@г!t(VariableQ4OQ4W@ Q4XQ4Y@@@@@@Z$ @@@ @@@\)@@г/$listQ4xQ4|@г!t3Simple_value_approxQ4bQ4u@ Q4vQ4w@@@@@@]I @@@ @@@_N@@@.@@` @@aS:"@@@[@@b @@cX^'@@@Q46*@% / Like [find_exn], but for a list of variables.  P   P 3@@@@@@@P@@:@5ѐ@@@@@@w-does_not_bindT"S~#S~@б@гY!t-S~.S~@@ @@@d3@8@A@@б@г$list>S~?S~@г!t(VariableLS~MS~@ PS~QS~@@@@@@e$ @@@ @@@g)@@г$boolcS~dS~@@ @@@h6@@@@@i@@j;" @@@C@@k @@l@F@@@uS~@@Q@@@@F0does_not_freshenUUU@б@г!tUU@@ @@@m3zyyzzzzz@_t@A@@б@г$listUU@гv!t(VariableUU@ UU@@@@@@n$ @@@ @@@p)@@г`$boolUU@@ @@@q6@@@@@r@@s;" @@@C@@t @@u@F@@@U@@R@@@@F*add_symbolgWW@б@г!tWW@@ @@@v3@_t@A@@б@г&Symbol!t&Symbol W W@  W W @@@@@@  @@б@г!t3Simple_value_approx W  W @  W! W"@@@@@@4 @@гV!t *W& +W'@@ @@@A@@@@@@@F @@@2@@ @@K:@@@S@@ @@PV@@@ AW@@ MS@@@@V/redefine_symbolh LX(. MX(=@б@г!t WX(@ XX(A@@ @@@3 F E E F F F F F@o@A@@б@гn!t&Symbol lX(E mX(K@  pX(L qX(M@@@@@@ @@б@гc!t3Simple_value_approx X(Q X(d@  X(e X(f@@@@@@2 @@г !t X(j X(k@@ @@@?@@@@@@@D @@@2@@ @@I:@@@Q@@ @@NT@@@ X(*@@ T@@@@T/find_symbol_exni Ylr Yl@б@г!t Yl Yl@@ @@@ 3        @m@A@@б@г!t&Symbol Yl Yl@  Yl Yl@@@@@@! @@г!t3Simple_value_approx Yl Yl@  Yl Yl@@@@@@"0 @@@@@#@@$5& @@@=@@% @@&:@@@@ Yln@@ U@@@@@/find_symbol_optj Z Z@б@гG!t Z Z@@ @@@'3        @Yn@A@@б@г2!t&Symbol 0Z 1Z@  4Z 5Z@@@@@@( @@г &option BZ CZ@г/!t3Simple_value_approx PZ QZ@  TZ UZ@@@@@@): @@@ @@@+?@@@-@@, @@-D5"@@@L@@. @@/IO'@@@ lZ*@@ xV@@,@@O1find_symbol_fatalk w[ x[@б@г!t [  [ @@ @@@03 q p p q q q q q@h}@A@@б@г!t&Symbol [ [@  [ [@@@@@@1 @@г!t3Simple_value_approx [ [/@  [0 [1@@@@@@20 @@@@@3@@45& @@@=@@5 @@6:@@@@ [@@ W@@@@@3find_or_load_symboll _ _@б@г !t _ _@@ @@@73        @Yn@A@@б@г!t&Symbol _ _@  _ _@@@@@@8 @@г!t3Simple_value_approx _ _@  _ _@@@@@@90 @@@@@:@@;5& @@@=@@< @@=:@@@@ _@@ (X@@@@@.add_projection 'b;A (b;O@б@г ^!t 2cPW 3cPX@@ @@@>3 !   ! ! ! ! !@Yn@A@@б*projectionг*Projection!t*Projection KdYk LdYu@  OdYv PdYw@@@@@@  @@б(bound_toг1!t(Variable eex fex@  iex jex@@@@@@8 @@г !t wf xf@@ @@@E@@'@@@@J ex @@I5@@ @@P dY`@@@Y@@ @@V\@@@ b;=@ > Note that the given [bound_to] holds the given [projection].  a a:@@@@@@@ Y@@)@  c@@@@@@u/find_projection j  j @б@г 렐!t k& k'@@ @@@3        @8@A@@б*projectionг!t*Projection l(: l(D@  l(E l(F@@@@@@ @@г &&option mGY mG_@г!t(Variable mGN mGV@  mGW mGX@@@@@@< @@@ @@@A@@?-@@ @@F l(/#@@@O@@ @@LR(@@@ j  +@ : d Determine if the environment knows about a variable that is bound to the given [projection].  h !i@@@@@@@ -Z@@;@ J 搠@@@@@@k#mem 7p 8p@б@г n!t Bp Cp@@ @@@3 1 0 0 1 1 1 1 1@8@A@@б@г#!t(Variable Wp Xp@  [p \p@@@@@@  @@г $bool ip jp@@ @@@!'@@@@@"@@#, @@@4@@$ @@%17@@@ {p@ F Whether the environment has an approximation for the given variable.  oac oa@@@@@@@ [@@"@  N@@@@@@P*freshening uu{ uu@б@г ֠!t uu uu@@ @@@&3        @i~8@A@@г*Freshening!t*Freshening uu uu@  uu uu@@@@@@ @@@"@@@@% @@@ uuw@ Return the freshening that should be applied to variables when rewriting code (in [Inline_and_simplify], etc.) using the given environment.  r t_t@@@@@@@ \@@@  @@@@@@>.set_freshening x x@б@г ,!t x x@@ @@@3        @Wl8@A@@б@гX!t*Freshening x x @  x x@@@@@@ @@г S!t 'x (x@@ @@@'@@@@@@@, @@@4@@ @@17@@@ 9x@ ` D Set the freshening that should be used as per [freshening], above.  Fw Gw@@@@@@@ S]@@"@ p @@@@@@P3activate_freshening ]~  ^~ #@б@г !t h~ & i~ '@@ @@@3 W V V W W W W W@i~8@A@@г !t w~ + x~ ,@@ @@@@@@@@@@ @@@ ~   @ Causes every bound variable in code rewritten during inlining and simplification, using the given environment, to be freshened. This is used when descending into subexpressions substituted into existing expressions.  z } @@@@@@@ ^@@@  W@@@@@@3%local  @б@г ߠ!t  @@ @@@3        @La8@A@@г !t  @@ @@@@@@@@@@ @@@  @ b Erase all variable approximation information and freshening information from the given environment. However, the freshening activation state is preserved. This function is used when rewriting inside a function declaration, to avoid (due to a compiler bug) accidental use of variables from outer scopes that are not accessible.  .0 Z@@@@@@@ _@@@  @@@@@@3 "inside_set_of_closures_declaration  @б@г6Set_of_closures_origin!t6Set_of_closures_origin@  @@@@@@3        @WlC@A @@б@г F!t@@ @@@@@г Ơ$bool'(@@ @@@@@@@@@@# @@@+@@ @@(3@@@9@ ` Determine whether the inliner is currently inside a function body from the given set of closures. This is used to detect whether a given function call refers to a function which exists somewhere on the current inlining stack. FG@@@@@@@S`@@"@ p @@@@@@G+at_toplevel]|^|@б@г !th|i|@@ @@@3WVVWWWWW@`8@A@@г$boolw|x|@@ @@@@@@@@@@ @@@|~ @ v Not inside a closure declaration. Toplevel code is the one evaluated when the compilation unit is loaded l{@@@@@@@a@@@ W@@@@@@30is_inside_branch@б@г ߠ!t@@ @@@ 3@La8@A@@гa$bool@@ @@@ @@@@@ @@  @@@ @@b@@@@,branch_depth@б@г !t@@ @@@ 3@3H@A@@г#int@@ @@@@@@@@@@ @@@ @@ c@@@@-inside_branch  @б@г C!t@@ @@@3@3H@A@@г R!t&'@@ @@@@@@@@@@ @@@3 @@?d@@@@6increase_closure_depth>?@б@г u!tIJ@@ @@@387788888@3H@A@@г !tXY@@ @@@@@@@@@@ @@@e @@qe@@@@0set_never_inlinepq@б@г !t{|@@ @@@3jiijjjjj@3H@A@@г !t@@ @@@@@@@@@@ @@@ @ Mark that call sites contained within code rewritten using the given environment should never be replaced by inlined (or unrolled) versions of the callee(s). !#@@@@@@@f@@@ j@@@@@@3 set_never_inline_inside_closuresX^X~@б@г !tXX@@ @@@3@La8@A@@г!tXX@@ @@@@@@@@@@  @@@XZ @ [ Equivalent to [set_never_inline] but only applies to code inside a set of closures. <W@@@@@@@g@@@@@@@@@3 "unset_never_inline_inside_closures@б@г=!t@@ @@@!3@La8@A@@гL!t !@@ @@@"@@@@@#@@$ @@@- @T ? Unset the restriction from [set_never_inline_inside_closures] :;@@@@@@@Gh@@@d@@@@@@3 !set_never_inline_outside_closuresQhnRh@б@г!t\h]h@@ @@@%3KJJKKKKK@La8@A@@г!tkhlh@@ @@@&@@@@@'@@( @@@xhj @ ] Equivalent to [set_never_inline] but does not apply to code inside a set of closures. Lg@@@@@@@i@@@K@@@@@@3 #unset_never_inline_outside_closures @б@гӠ!t@@ @@@)3@La8@A@@г⠐!t@@ @@@*@@@@@+@@, @@@ @ꐠ @ Unset the restriction from [set_never_inline_outside_closures] @@@@@@@j@@@@@@@@@3,never_inlinex~x@б@г!txx@@ @@@-3@La8@A@@г$boolxx@@ @@@.@@@@@/@@0 @@@xz @5 Z Return whether [set_never_inline] is currently in effect on the given environment. bw@@@@@@@(k@@@Eᐠ@@@@@@3.inlining_level23@б@гi!t=>@@ @@@13,++,,,,,@La8@A@@г #intLM@@ @@@2@@@@@3@@4 @@@Y @@el@@@@1inlining_level_upde@б@г!top@@ @@@53^]]^^^^^@3H@A@@г!t~@@ @@@6@@@@@7@@8 @@@ @ Mark that this environment is used to rewrite code for inlining. This is used by the inlining heuristics to decide whether to continue. Unconditionally inlined does not take this into account. M@@@@@@@m@@@^@@@@@@32actively_unrolling@б@г栐!t  @@ @@@93@La8@A@@б@г!t6Set_of_closures_origin$@ %&@@@@@@: @@г&option.4@г#int*-@@ @@@;1@@@@@@=6 @@@$@@> @@?;,@@@C@@@ @@A@F@@@!@) 5 Whether we are actively unrolling a given function. @@@@@@@n@@1@9Ր@@@@@@_8start_actively_unrolling&tz't@б@г]!t1t2t@@ @@@B3      @x8@A@@б@гD!t6Set_of_closures_originFtGt@ JtKt@@@@@@C @@б@г#intZt[t@@ @@@D)@@г!tgtht@@ @@@E6@@@@@F@@G; @@@)@@H @@I@1@@@H@@J @@KEK@@@~tv@ 6 Start actively unrolling a given function [n] times. 686s@@@@@@@o@@'@Q@@@@@@d;continue_actively_unrolling@б@г٠!t"#@@ @@@L3@}8@A@@б@г!t6Set_of_closures_origin'=@ >?@@@@@@M @@г!tCD@@ @@@N'@@@@@O@@P, @@@4@@Q @@R17@@@@ 6 Unroll a function currently actively being unrolled. @@@@@@@p@@"@@@@@@@P1unrolling_allowed  @б@гA!t@@ @@@S3@i~8@A@@б@г(!t6Set_of_closures_origin*+@ ./@@@@@@T @@г۠$bool<=@@ @@@U'@@@@@V@@W, @@@4@@X @@Y17@@@N@u d Whether it is permissible to unroll a call to a recursive function in the given environment. [FH\@@@@@@@hq@@"@!@@@@@@P8inside_unrolled_functionr o us o @б@г!t} o ~ o @@ @@@Z3lkklllll@i~8@A@@б@г!t6Set_of_closures_origin o  o @  o  o @@@@@@[ @@гР!t o  o @@ @@@\'@@@@@]@@^, @@@4@@_ @@`17@@@ o q@ݐ t Whether the given environment is currently being used to rewrite the body of an unrolled recursive function.  > n@@@@@@@r@@"@@@@@@@P0inlining_allowedˠ!!!!,@б@г!t!!/!!0@@ @@@a3@i~8@A@@б@г.Closure_origin!t.Closure_origin!!4!!B@ !!C!!D@@@@@@ @@г$bool!!H!!L@@ @@@)@@@@@@@. @@@6@@ @@39@@@ !!@G Z Whether it is permissible to inline a call to a function in the given environment. -  .!!@@@@@@@:s@@"@W󐠠@@@@@@R7inside_inlined_function̠D!!E!!@б@г{!tO!!P!!@@ @@@3>==>>>>>@k8@A@@б@гj!t.Closure_origind!!e!!@ h!!i!!@@@@@@ @@г!tv!!w!!@@ @@@'@@@@@@@, @@@4@@ @@17@@@!!@ i Whether the given environment is currently being used to rewrite the body of an inlined function. !N!P!!@@@@@@@t@@"@[@@@@@@P5note_entering_closure"""#@б@г㠐!t####@@ @@@3@i~8@A@@б*closure_idг*Closure_id!t*Closure_id##*##4@ ##5##6@@@@@@M @@б#dbgг)Debuginfo!t)Debuginfo#7#B#7#K@ #7#L#7#M@@@@@@: @@г*!t#N#U#N#V@@ @@@G@@)@@@@L #7#> @@K7@@ @@R##@@@[@@ @@X^@@@""@> If collecting inlining statistics, record that the inliner is about to descend into [closure_id]. This information enables us to produce a stack of closures that form a kind of context around an inlining decision point. $!!%""@@@@@@@1u@@)@Nꐠ@@@@@@w2note_entering_call;$^$d<$^$v@б@гr!tF$w$~G$w$@@ @@@354455555@8@A@@б*closure_idг!t*Closure_id]$$^$$@ a$$b$$@@@@@@ @@б#dbgг!t)Debuginfow$$x$$@ {$$|$$@@@@@@6 @@г!t$$$$@@ @@@C@@'@@@@H$$ @@G5@@ @@N$$@@@W@@ @@TZ@@@$^$`@ɐ If collecting inlining statistics, record that the inliner is about to descend into a call to [closure_id]. This information enables us to produce a stack of closures that form a kind of context around an inlining decision point. #X#[$;$]@@@@@@@v@@)@u@@@@@@s5note_entering_inlined%%%%@б@г!t%%%%@@ @@@3@8@A@@г !t%%%%@@ @@@@@@@@@@ @@@%% @ If collecting inlining statistics, record that the inliner is about to descend into an inlined function call. This requires that the inliner has already entered the call with [note_entering_call]. $$%\%@@@@@@@w@@@$@@@@@@39note_entering_specialised!&&&&@б@гH!t&&&&@@ @@@3        @La8@A@@б+closure_idsгf#Set!t*Closure_id7&&8&&@ ;&&<&&@@@&&A&&@ @@@@@ p%@@гz!tN&&O&&@@ @@@ q2@@0@@ r@@ s7Y&& @@@@@@ t @@ u=C@@@a&&@ If collecting inlining statistics, record that the inliner is about to descend into a specialised function definition. This requires that the inliner has already entered the call with [note_entering_call]. n%%o&a&@@@@@@@{x@@#@4@@@@@@\-enter_closure"(( ((@б@г!t((!(("@@ @@@ v3~~@u8@A@@б*closure_idг!t*Closure_id(#(5(#(?@ (#(@(#(A@@@@@@ w @@б-inline_insideг\$bool(B(W(B([@@ @@@ x-@@б#dbgг!t)Debuginfo(\(g(\(p@ (\(q(\(r@@@@@@ yG @@б!fб@г!t(s(}(s(~@@ @@@ zZ@@А!a@ D@ {c(s((s(@@@@@ | @@ }j@@А!an((((@@)@@ ~@@ u (s(z@@I7@@  @@ {(\(c @@`W@@  @@ (B(I@@n@@  @@ (#(*@@@@@  @@ @@@%((!@L  Update a given environment to record that the inliner is about to descend into [closure_id] and pass the resulting environment to [f]. If [inline_inside] is [false] then the environment passed to [f] will be marked as [never_inline] (see above). 2&&3'(@@@@@@@?y@@1@\@@@@@@/record_decision,I):)@J):)O@б@г!tT)P)WU)P)X@@ @@@ 3CBBCCCCC@8@A@@б@г4Inlining_stats_types(Decision!t4Inlining_stats_typeso)Y)`p)Y)t@ s)Y)ut)Y)}@@x)Y)~y)Y)@ @@@@@ %@@г$unit))))@@ @@@ 2@@@@@ @@ 7" @@@?@@  @@ <B@@@):)<@ If collecting inlining statistics, record an inlining decision for the call at the top of the closure stack stored inside the given environment. (()#)9@@@@@@@z@@"@k@@@@@@[%print-))))@б@г&Format)formatter))))@ ))))@@@@@@ 3@}A@A @@б@г !t))))@@ @@@ @@г|$unit))))@@ @@@ @@@@@ @@ # @@@+@@  @@ (3@@@))@' : Print a human-readable version of the given environment.  ))))@@@@@@@{@@"@7Ӑ@@@@@@G4set_inline_debuginfo.$**%**@б@г[!t/**0**@@ @@@ 3@`~8@A@@б#dbgг\!t)DebuginfoF**G**@ J**K**@@@@@@  @@г!tX**Y**@@ @@@ )@@'@@ @@ .c** @@@7@@  @@ 4:@@@k**@ The environment stores the call-site being inlined to produce precise location information. This function sets the current call-site being inlined. x))y**@@@@@@@|@@#@>@@@@@@S5add_inlined_debuginfo/ +*+0 +*+E@б@гƠ!t +*+H +*+I@@ @@@ 3@l8@A@@б#dbgг!t)Debuginfo +*+Q +*+Z@  +*+[ +*+\@@@@@@  @@г!t)Debuginfo +*+` +*+i@  +*+j +*+k@@@@@@ 2 @@0@@ @@ 7 +*+M @@@@@@  @@ =C@@@ +*+,@ D Appends the locations of inlined call-sites to the [~dbg] argument  ** *+)@@@@@@@}@@$@@@@@@@\@-'A@{@[&@@k@K@@t@ @6@@A@x@@@@L@E@v@o @@e@^@ @ } @  @  b@ B @  @  j@ J @  @  p@ i @@ 9 @  @  @  g@ G @@@lC@#@@U@5@u@U@@A@!@N@.@|@\ @H@(@q@Q@@@3]\\]]]]]@@A{`wV$1x +l+o@@@zV$$@e@&ResultD +q+x +q+~@Q@@БA+!t1E,=,D,=,E@@;@@A@@@@@,=,?@ Result structures approximately follow the evaluation order of the program. They are returned by the simplification algorithm acting on an Flambda subexpression. ++,,<@@@@@@@@@@@@A@k@@@@@@@3@@A@8@@q@Q(@@Q@1@b@B@@c]A@5@g@G@e@^ @@3@,@x@q"@@Z@: @  s@ S @  @  p@ P '@  @  v@ V -@ & @  @  @  m@ M $@  @  @ r I@ ) @@@g@@x2@@f@F@@x @@b9@@@@t.@@S@@@i@A@&create29,G,M:,G,S@б@гҠ$unitD,G,VE,G,Z@@ @@@ 332233333@@A@@г!tS,G,^T,G,_@@ @@@ @@@@@ @@  @@@`,G,I @@l@@@@@&approx3k,,l,,@б@г᠐!tv,,w,,@@ @@@ 3eddeeeee@3H@A@@гh!t3Simple_value_approx,,,,@ ,,,,@@@@@@  @@@ @@ @@ # @@@,,@ M The approximation of the subexpression that has just been simplified. ,a,c,,@@@@@@@A@@@n@@@@@@<*set_approx4----@б@г5!t----@@ @@@ 3@Uj8@A@@б@г!t3Simple_value_approx----@ ----@@@@@@  @@г\!t----@@ @@@ '@@@@@ @@ , @@@4@@  @@ 17@@@--@* Set the approximation of the subexpression that has just been simplified. Typically used just before returning from a case of the simplification algorithm. ,,-p-@@@@@@@B@@"@:֐@@@@@@P+meet_approx5'"..("..@б@г!t2"..3"..@@ @@@ 3!  !!!!!@i~8@A@@б@г!t#EnvG"..H"..@ K"..L"..@@@@@@"u @@б@г>!t3Simple_value_approx_"..`"..@ c"..d"..@@@@@@"v2 @@гܠ!tq"..r"..@@ @@@"w?@@@@@"x@@"yD @@@2@@"z @@"{I:@@@Q@@"| @@"}NT@@@"..@ Set the approximation of the subexpression to the meet of the current return approximation and the provided one. Typically used just before returning from a branch case of the simplification algorithm. --!..@@@@@@@C@@'@[@@@@@@m6used_static_exceptionss&/Y/_&/Y/u@б@г"!t&/Y/x&/Y/y@@ @@@"~3@8@A@@г0Static_exception#Set!t0Static_exception&/Y/}&/Y/@ &/Y/&/Y/@@&/Y/&/Y/@ @@@@@%h#@@@+@@%i@@%j(. @@@&/Y/[@ g All static exceptions for which [use_staticfail] has been called on the given result structure. $..%/4/X@@@@@@@D@@@@@@@@@G4use_static_exceptiont )// )//@б@г!t)//)//@@ @@@%k3@`u8@A@@б@г`!t0Static_exception+)//,)/0@ /)/00)/0@@@@@@%l @@г!t=)/0 >)/0 @@ @@@%m'@@@@@%n@@%o, @@@4@@%p @@%q17@@@O)//@v 5 Mark that the given static exception has been used. \(//](//@@@@@@@iE@@"@"@@@@@@P0exit_scope_catchus.00t.01@б@г預!t~.01.01@@ @@@%r3mllmmmmm@i~8@A@@б@г!t0Static_exception.01.01@ .01.01@@@@@@%s @@г!t.01.01@@ @@@%t'@@@@@%u@@%v, @@@4@@%w @@%x17@@@.00@ސ Mark that we are moving up out of the scope of a static-catch block that catches the given static exception identifier. This has the effect of removing the identifier from the [used_staticfail] set. +0 0-00@@@@@@@F@@"@@@@@@@P'benefit211211@б@гQ!t211211@@ @@@%y3@i~8@A@@г-Inlining_cost'Benefit!t-Inlining_cost211211@ 211211@@211 211@ @@@@@&#@@@+@@&@@&(. @@@211@= w The benefit to be gained by inlining the subexpression whose simplification yielded the given result structure. #01!1#$11d1@@@@@@@0G@@@M鐠@@@@@@G+map_benefit:6262<;6262G@б@г!tE72H2NF72H2O@@ @@@&343344444@`u8@A@@б@б@гc'Benefit!t-Inlining_cost`82P2Xa82P2e@ d82P2fe82P2m@@i82P2nj82P2o@ @@@@@&%@@г'Benefit!t-Inlining_cost82P2s82P2@ 82P282P2@@82P282P2@ @@@@@&D@@@'@@&@@&I4 @@г!t922922@@ @@@&V@@@@@&@@&[82P2W @@@d@@& @@&ag@@@62628@Ր ` Apply a transformation to the inlining benefit stored within the given result structure. 4115225@@@@@@@H@@#@@@@@@@+add_benefit=22=23 @б@гH!t=23 =23 @@ @@@&3@8@A@@б@г'Benefit!t-Inlining_cost=23=23@ =23=23&@@=23'=23(@ @@@@@&#@@гx!t =23,=23-@@ @@@&0@@@@@&@@&5" @@@=@@& @@&:@@@@=22@F Z Add some benefit to the inlining benefit stored within the given result structure. ,;22-<22@@@@@@@9I@@"@V򐠠@@@@@@Y-reset_benefitCA33DA33@б@г!tNA33OA33@@ @@@&3=<<=====@r8@A@@гȠ!t]A33^A33@@ @@@&@@@@@&@@& @@@jA33 @ j Set the benefit of inlining the subexpression corresponding to the given result structure to zero. w?3/31x@3x3@@@@@@@J@@@=@@@@@@36set_inlining_thresholdC33C33@б@г!tD33D33@@ @@@&3@La8@A@@б@г蠐&optionD34D34@г)Threshold!t-Inlining_costD33D33@ D33D33@@D33D34@ @@@@@&-@@@)@@@&2&@@гC!tD34 D34 @@ @@@&?@@@@@&@@&D' @@@L@@& @@&IO@@@C33@@K@@@@O6add_inlining_thresholdE4 4E4 4)@б@гk!tF4,40F4,41@@ @@@&3@h}@A@@б@г)Threshold!t-Inlining_costF4,45F4,4B@ F4,4CF4,4L@@"F4,4M#F4,4N@ @@@@@&#@@г!t0F4,4R1F4,4S@@ @@@&0@@@@@&@@&5" @@@=@@& @@&:@@@@BE4 4@@NL@@@@@6sub_inlining_thresholdMG4T4ZNG4T4p@б@гà!tXH4s4wYH4s4x@@ @@@&3GFFGGGGG@Yn@A@@б@гt)Threshold!t-Inlining_costqH4s4|rH4s4@ uH4s4vH4s4@@zH4s4{H4s4@ @@@@@&#@@г!tH4s4H4s4@@ @@@&0@@@@@'@@'5" @@@=@@' @@':@@@@G4T4V@@M@@@@@2inlining_thresholdI44I44@б@г!tI44I44@@ @@@'3@Yn@A@@г&optionI44I44@г)Threshold!t-Inlining_costI44I44@ I44I44@@I44I44@ @@@@@'+@@@)@@@'0&@@@8@@' @@' 5;+@@@I44.@@N@@0@@;7seen_direct_applicationK44K44@б@гn!t K44 K44@@ @@@' 3@Ti@A@@г}!t K45 K45@@ @@@' @@@@@' @@'  @@@ K44 @@ +O@@@@7num_direct_applications *L55  +L55!@б@г!t 5L55$ 6L55%@@ @@@'3 $ # # $ $ $ $ $@3H@A@@г #int DL55) EL55,@@ @@@'@@@@@'@@' @@@ QL55 @@ ]P@@@@@A@#@@[@;@{@[@@R@2@M@-@@0@)@@Y@R)@@3 b a a b b b b b@?T+@A'3 e d d e e e e e@@A } +q+ ~M5-50@@@  +q+q@@:initial_inlining_threshold P5W5[ P5W5u@б%roundг W#int P5W5~ P5W5@@ @@@'3        @@ A@oF@? @@$@@a@A@@~@@yP@0@|@u&@@@u@@@E<@A.-@@г)Threshold!t-Inlining_cost P5W5 P5W5@  P5W5 P5W5@@ P5W5 P5W5@ @@@@@'G@@XO@@'@@'L P5W5x @@@ P5W5W@? Command line argument -inline  O5252 O525V@@@@@@@!R@@@# @@@@@@l #initial_inlining_toplevel_threshold!S55!S55@б%roundг ݠ#int!T56!T56@@ @@@'3! ! ! ! ! ! ! ! @:@A@@г7)Threshold!t-Inlining_cost!4T56!5T56@ !8T56!9T56@@!=T56!>T56 @ @@@@@'!@@2)@@'@@'&!IT55 @@@!LS55@s ( Command line argument -inline-toplevel !YR55!ZR55@@@@@@@!fS@@@!@@@@@@F #prepare_to_simplify_set_of_closures#!pV6"6&!qV6"6I@б#envг!t#Env!W6J6S!W6J6V@ !W6J6W!W6J6X@@@@@@'3!u!t!t!u!u!u!u!u@jC@A @@б/set_of_closuresг'Flambda/set_of_closures'Flambda!X6Y6n!X6Y6u@ !X6Y6v!X6Y6@@@@@@+ @@б.function_declsг5function_declarations'Flambda!Y66!Y66@ !Y66!Y66@@@@@@+8 @@б'freshenг!n$bool!Z66!Z66@@ @@@+I@@б6only_for_function_declг!&option![67![67 @гQ4function_declaration'Flambda![66![66@ ![66![67@@@@@@+m @@@ @@@+r@@В@г#Map!t(Variable"\7 7@"\7 7H@ "\7 7I"\7 7L@@"\7 7M"\7 7N@ @В@г.specialised_to'Flambda"-\7 7".\7 7@ "1\7 7"2\7 7&@@@@@@0+ @@@г$!t3Simple_value_approx"E\7 7)"F\7 7<@ "I\7 7="J\7 7>@@@@@@0,İ @@@@ @ @@0-˰* @@@U @@@0/а"\\7 7B@@@г7#Map!t(Variable"n]7Z7w"o]7Z7@ "r]7Z7"s]7Z7@@"w]7Z7"x]7Z7@ @г.specialised_to'Flambda"]7Z7`"]7Z7g@ "]7Z7h"]7Z7v@@@@@@00 @@@2@@@02 @@@г5function_declarations'Flambda"^77"^77@ "^77"^77@@@@@@03" @@@г#Map!t(Variable"_77"_77@ "_77"_77@@"_77"_77@ @г!t3Simple_value_approx"_77"_77@ "_77"_77@@@@@@04V @@@2@@@06[@@@г5value_set_of_closures3Simple_value_approx"`88$"`887@ "`888"`88M@@@@@@07s @@@г!E!t#Env# a8N8T# a8N8W@ #a8N8X#a8N8Y@@@@@@08 @@@@Ġ@@u@?@(@@@09@@Q1@@0:@@0;#+[66@@h_@@0< @@0=#1Z66!@@v@@0> @@0?#7Y66'@@@@0@ @@0A#=X6Y6^-@@@@0B @@0C#CW6J6O3@@@#FV6"6"6@@#RT@@8@@;prepare_to_simplify_closure$#Qc8[8_#Rc8[8z@б-function_declг4function_declaration'Flambda#bd8{8#cd8{8@ #fd8{8#gd8{8@@@@@@0D3#V#U#U#V#V#V#V#V@*@A @@б)free_varsгK#Map!t(Variable#e88#e88@ #e88#e88@@#e88#e88@ @В@г.specialised_to'Flambda#e88#e88@ #e88#e88@@@@@@0E< @@@г !t3Simple_value_approx#e88#e88@ #e88#e88@@@@@@0FT @@@@ @ @@0G[* @@@U @@@0I`#e88B@@б0specialised_argsг#Map!t(Variable#f89'#f89/@ #f890#f893@@#f894#f895@ @г\.specialised_to'Flambda#f89#f89@ #f89#f89&@@@@@@0J @@@2@@@0L@@б8parameter_approximationsг#Map!t(Variable$g969j$g969r@ $ g969s$!g969v@@$%g969w$&g969x@ @г!!t3Simple_value_approx$4g969T$5g969g@ $8g969h$9g969i@@@@@@0MҰ @@@2@@@0Oװ@@б3set_of_closures_envг"!t#Env$Sh9y9$Th9y9@ $Wh9y9$Xh9y9@@@@@@0P @@г"!t#Env$ii99$ji99@ $mi99$ni99@@@@@@0Q @@0@@0R@@0S $yh9y9~ @@q?@@0T @@0U$g969;@@@@0V @@0W$f88@@@@0X @@0Y$e88@@9'@@0Z @@0[$$d8{8$@@@$c8[8['@@$U@@)@@+/keep_body_check_$k99$k99@б/is_classic_modeг$K$bool$l99$l99@@ @@@0\3$$$$$$$$@Ff!@A@@б)recursiveг#$Lazy!t$m99$m99@ $m99$m99@@г #Set!t(Variable$m99$m99@ $m99$m99@@$m99$m99@ @@@@@3I8@@@2@@@3K='@@б@г !t(Variable$n99$n9:@ %n9:%n9:@@@@@@3LU @@б@гw4function_declaration'Flambda%o:: %o::@ %o::%o::(@@@@@@3Mm @@г$Š$bool%&p:):.%'p:):2@@ @@@3Nz@@@@@3O@@3P @@@2@@3Q @@3R:@@P@@3S @@3T%;m99@@@@3U @@3V%Al99@@@%Dk99@@%PV@@ @@@#@ @ #@@ @@ @@e@E@@@@@3%A%@%@%A%A%A%A%A@@A@ H************************************************************************%]A@@%^A@L@ H %cBMM%dBM@ H OCaml %iC%jC@ H %oD%pD3@ H Pierre Chambart, OCamlPro %uE44%vE4@ 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@ q* Environments and result structures used during inlining and simplification. (See inline_and_simplify.ml.) # 9* Environments follow the lexical scopes of the program. #Ҡ * Create a new environment. If [never_inline] is true then the returned environment will prevent [Inline_and_simplify] from inlining. The [backend] parameter is used for passing information about the compiler backend being used. Newly-created environments have inactive [Freshening]s (see below) and do not initially hold any approximation information. #* t* Obtain the first-class module that gives information about the compiler backend being used for compilation. "֠ D* Obtain the really_import_approx function from the backend module. "e 2* Which simplification round we are currently in. " A* Where to print intermediate asts and similar debug information !̠ * Add the approximation of a variable---that is to say, some knowledge about the value(s) the variable may take on at runtime---to the environment. !H )* Like [add], but for mutable variables.  X * Find the approximation of a given variable, raising a fatal error if the environment does not know about the variable. Use [find_opt] instead if you need to catch the failure case. ꠠ .* Like [find_exn], but for mutable variables. | z* Like [find_exn], but intended for use where the "not present in environment" case is to be handled by the caller. \ 0* Like [find_exn], but for a list of variables. Р w Like [find_symbol_exn], but load the symbol approximation using the backend if not available in the environment. %]35%^x@ ?* Note that the given [bound_to] holds the given [projection]. G e* Determine if the environment knows about a variable that is bound to the given [projection]. Ǡ G* Whether the environment has an approximation for the given variable. b * Return the freshening that should be applied to variables when rewriting code (in [Inline_and_simplify], etc.) using the given environment.  E* Set the freshening that should be used as per [freshening], above.  * Causes every bound variable in code rewritten during inlining and simplification, using the given environment, to be freshened. This is used when descending into subexpressions substituted into existing expressions. b c* Erase all variable approximation information and freshening information from the given environment. However, the freshening activation state is preserved. This function is used when rewriting inside a function declaration, to avoid (due to a compiler bug) accidental use of variables from outer scopes that are not accessible.  * Determine whether the inliner is currently inside a function body from the given set of closures. This is used to detect whether a given function call refers to a function which exists somewhere on the current inlining stack.  w* Not inside a closure declaration. Toplevel code is the one evaluated when the compilation unit is loaded k * Mark that call sites contained within code rewritten using the given environment should never be replaced by inlined (or unrolled) versions of the callee(s). [ \* Equivalent to [set_never_inline] but only applies to code inside a set of closures.  @* Unset the restriction from [set_never_inline_inside_closures] ˠ ^* Equivalent to [set_never_inline] but does not apply to code inside a set of closures.  A* Unset the restriction from [set_never_inline_outside_closures] ; [* Return whether [set_never_inline] is currently in effect on the given environment.  * Mark that this environment is used to rewrite code for inlining. This is used by the inlining heuristics to decide whether to continue. Unconditionally inlined does not take this into account. y 6* Whether we are actively unrolling a given function.  7* Start actively unrolling a given function [n] times.  7* Unroll a function currently actively being unrolled. ' e* Whether it is permissible to unroll a call to a recursive function in the given environment.   u* Whether the given environment is currently being used to rewrite the body of an unrolled recursive function. ] [* Whether it is permissible to inline a call to a function in the given environment.  j* Whether the given environment is currently being used to rewrite the body of an inlined function.  * If collecting inlining statistics, record that the inliner is about to descend into [closure_id]. This information enables us to produce a stack of closures that form a kind of context around an inlining decision point.  * If collecting inlining statistics, record that the inliner is about to descend into a call to [closure_id]. This information enables us to produce a stack of closures that form a kind of context around an inlining decision point. } * If collecting inlining statistics, record that the inliner is about to descend into an inlined function call. This requires that the inliner has already entered the call with [note_entering_call]. 5 * If collecting inlining statistics, record that the inliner is about to descend into a specialised function definition. This requires that the inliner has already entered the call with [note_entering_call]. Ġ  * Update a given environment to record that the inliner is about to descend into [closure_id] and pass the resulting environment to [f]. If [inline_inside] is [false] then the environment passed to [f] will be marked as [never_inline] (see above).  * If collecting inlining statistics, record an inlining decision for the call at the top of the closure stack stored inside the given environment.  ;* Print a human-readable version of the given environment. . * The environment stores the call-site being inlined to produce precise location information. This function sets the current call-site being inlined.  Ơ E* Appends the locations of inlined call-sites to the [~dbg] argument  U * Result structures approximately follow the evaluation order of the program. They are returned by the simplification algorithm acting on an Flambda subexpression.  N* The approximation of the subexpression that has just been simplified.  * Set the approximation of the subexpression that has just been simplified. Typically used just before returning from a case of the simplification algorithm.  : * Set the approximation of the subexpression to the meet of the current return approximation and the provided one. Typically used just before returning from a branch case of the simplification algorithm.  h* All static exceptions for which [use_staticfail] has been called on the given result structure.  \ 6* Mark that the given static exception has been used.  * Mark that we are moving up out of the scope of a static-catch block that catches the given static exception identifier. This has the effect of removing the identifier from the [used_staticfail] set.  x* The benefit to be gained by inlining the subexpression whose simplification yielded the given result structure.  6 a* Apply a transformation to the inlining benefit stored within the given result structure.  [* Add some benefit to the inlining benefit stored within the given result structure. 3 k* Set the benefit of inlining the subexpression corresponding to the given result structure to zero. 렠 * Command line argument -inline l )* Command line argument -inline-toplevel % fvs &k\7 7P&l\7 7Y@7 specialised arguments &q]7Z7&r]7Z7@: parameter approximations &w_77&x_78@@-./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&& F/home/ci/builds/workspace/main/flambda/false/label/ocaml-ubuntu-latest >10/.-,+*)('&%$#"! @@0-ZN3&&&&&&&&@&@@/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ݷ$E'Flambda0VJ͟*Format_doc0uy@GmWUࠠ*Freshening0xW("-9wVԠ%Ident0>ЃzV)j⠠,Identifiable0]/*N 'G0E#X̕B,;x -Inlining_cost0i(wypP1 󰠠ِ0)x0pukC\7Internal_variable_names0TbgѹG+L&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{&@0E#X̕B,;x AW@ِ@&K&g@c@#$-@!!@ 2 @S@$A@%]%@ >@}!ԓ!@#V#@@  R$$@°  @B@%%f@@ x ۰ @]""p@i˰'@@=kŐ-@zD=y@  G@@  @7@MTh@<԰Z$$@  R  w@@@ i @>"" @ڐ3@@@3@P@  N!/!@ "ǐ#)@@9@@c!"&$&@J@@vS | а@;E#L#@2|װ$i@  -i@@@ِ@@@@ 8@@B?@ F ''"@@@P@@