Caml1999I037uZ/-Inlining_costӠ)Threshold:@!tE;@@,Never_inline@@ $middle_end/flambda/inlining_cost.mli[[@@A@@@ K@@!+L@@@@S@@T@@@@U@@V@@@W@@X@@Y@$F ? A%F ? V@@:L@@#maxM%round(@@@Z@@[@5@@@\@@]@<@@@^@@_?@@@`@@a@@b@@c@HG W YIG W {@@^M@@+remove_callN@O@@@d@@eR@@@f@@g@[I } \I } @@qN@@,remove_allocO@b@@@h@@ie@@@j@@k@nL  oL  5@@O@@+remove_primP@u@@@l@@mx@@@n@@o@M 6 8M 6 P@@P@@,remove_primsQ@@@@p@@q@@@@r@@s@@@t@@u@@v@N Q SN Q s@@Q@@-remove_branchR@@@@w@@x@@@y@@z@O t vO t @@R@@7direct_call_of_indirectS@@@@{@@|@@@}@@~@P  P  @@S@@0requested_inlineT@@@@@@'size_ofG!t@@@@@@@@@@@@@Q  Q  @@T@@+remove_codeU@]!t@@@@@@@@@@@@@@@@@@@S  S  @@U@@1remove_code_namedV@z%named@@@@@@@@@@@@@@@@@@@T  T  G@@1V@@1remove_projectionW@*Projection!t@@@@@@.@@@@@1@@@@@@@@:U H J;U H x@@PW@@(add_codeX@!t@@@@@@K@@@@@N@@@@@@@@WW z |XW z @@mX@@.add_code_namedY@%named@@@@@@h@@@@@k@@@@@@@@tX  uX  @@Y@@.add_projectionZ@Y!t@@@@@@@@@@@@@@@@@@@Y  Y  @@Z@@%print[@&Stdlib&Format)formatter@@@@@@@@@@@$unitF@@@@@@@@[  [ (@@[@@@@}  \),@\@@@Ӡ:Whether_sufficient_benefit>@!t\;@@@A@@@@@bb@@@@]@A@&create](originalG!t@@@@@(toplevelj@@@@@,branch_depth@@@@@@e!t@@@@@'benefit!t@@@@@'lifting@@@@@%round @@@ @@!Z@@@"@@#@@$@@%@@&@@'@@(@@)@ d!liq@@6^@@/create_estimate^-original_size$@@@*@@+(toplevel@@@,@@-,branch_depth8@@@.@@/(new_sizeB@@@0@@1'benefitU!t@@@2@@3'lifting@@@4@@5%rounda@@@6@@7T@@@8@@9@@:@@;@@<@@=@@>@@?@snsutv"*@@_@@(evaluate_@d@@@@@@A @@@B@@C@x,.x,F@@`@@)to_string`@x@@@D@@E&stringQ@@@F@@G@zHJzHe@@a@@1print_descriptiona,subfunctions2@@@H@@I@&Format)formatter@@@J@@K@@@@L@@M@@@N@@O@@P@@Q@|gi|g@@b@@@@^..}@c@@@9scale_inline_threshold_by?@@@@@@d@@;default_toplevel_multiplier@@@@@@@e@@0direct_call_sizeA@@@@@@f@@ )maximum_interesting_size_of_function_bodyB@@@@@@@@@@@@@@g@@/lambda_smaller'C@$expr@@@@@$than@@@@@F@@@@@@@@@@@,-@@Bh@@+lambda_sizeD@$expr@@@@@4@@@@@@CD@@Yi@@@@-Inlining_cost0i(wypP1 󰠠(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ɞ%Shape0 M``ll6Set_of_closures_origin0!YA _XO 2Set_of_closures_id0LbO`ܩ&M*Projection02hS xj56)Primitive0dU=\I/}$Path0k.tbGmᠠ)Parsetree0v o[pY Y)Parameter0zk^f2my19+Outcometree0BuG^)= 9c 'Numbers0 q޷He0Mutable_variable0CQᷧ$$Misc0Bpg]?[q)Longident0wP q;ɡ(Location0nBɊOn?7~ؠ)Load_path0,j " nn7ݠ,Linkage_name0tԈK1G&Lambda0x_edT-uq7Internal_variable_names0TbgѹG+L,Identifiable0]/*N %Ident0>ЃzV)j⠠*Format_doc0uy@GmWUࠠ'Flambda0VJ͟#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(Asttypes0eT$BbRM dc/Allocated_const0/vVǟx@@@Caml1999T037fC@QC-Inlining_cost-ocaml.warning $middle_end/flambda/inlining_cost.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 d Measurement of the cost (including cost in space) of Flambda terms in the context of inlining. ST@@@@@@)ThresholdAVV(@G@@БA+!tBZZ@@;@@,Never_inline@@[[@@A@^@@ @@@3,++,,,,,@+tn@A@@б@гz!tN^ O^ @@ @@@@@г!t[^\^@@ @@@@@@@@@@# @@@+@@ @@(.@@@m^@@yC@@@@.#subx_y_@б@г!t__ @@ @@@3rqqrrrrr@G\@A@@б@г!t_$_%@@ @@@@@г͠!t_)_*@@ @@@@@@@@@@# @@@+@@ @@(.@@@_@@D@@@@.#min`+1`+4@б@г!t`+7`+8@@ @@@3@G\@A@@б@г!t`+<`+=@@ @@@@@г!t`+A`+B@@ @@@@@@@@@@# @@@+@@ @@(.@@@`+-@@E@@@@.%equalaCIaCN@б@г;!taCQaCR@@ @@@3@G\@A@@б@гL!t aCV!aCW@@ @@@@@г̠$bool-aC[.aC_@@ @@@@@@@@@@# @@@+@@ @@(.@@@?aCE@@KF@@@@.@tnA@@@S@L@@365566666@9N@A 9PV+Qcad@@@SV@>@*can_inline^]h04^h0>@б@г'Flambda!t'Flambdani?Eoi?L@ ri?Msi?N@@@@@@ u3baabbbbb@a@A@R@@@I@@@4@A@@б@г!t)ThresholdjOTjO]@ jO^jO_@@@@@@ & @@б%bonusгj#intk`kk`n@@ @@@ 7@@гV$boollotlox@@ @@@ D@@@@ @@ Ik`e @@@,@@  @@ O4@@@W@@  @@ T_@@@h00@@H@@@@Z0can_try_inlining_v  v  @б@г}!t'Flambdaw  w  @ w  w  @@@@@@ 3@|(@A @@б@г@@ @@@ 3@& @A@@@E 0 2 @@K@@ @@!+bF ? EF ? H@б@г;!tF ? KF ? L@@ @@@ 3@!4@A@@б@гL!tF ? PF ? Q@@ @@@ @@гY!tF ? UF ? V@@ @@@ @@@@@ @@ # @@@+@@  @@ (.@@@F ? A@@L@@@@.#maxcG W ]G W `@б%roundг̠#int G W i G W l@@ @@@ 3@I^!@A@@б@г!tG W pG W q@@ @@@ @@б@г!t,G W u-G W v@@ @@@  @@г!t9G W z:G W {@@ @@@ -@@@@@ @@ 2 @@@)@@  @@ 7,@@H?@@  @@ <NG W c@@@QG W Y@@]M@@@@C+remove_calld\I } ]I } @б@гޠ!tgI } hI } @@ @@@ 3VUUVVVVV@\s@A@@г!tvI } wI } @@ @@@ @@@@@ @@  @@@I }  @@N@@@@,remove_alloceL  L  ,@б@г!tL  /L  0@@ @@@ 3@3H@A@@г!tL  4L  5@@ @@@ @@@@@ @@  @@@L   @@O@@@@+remove_primfM 6 <M 6 G@б@гB!tM 6 JM 6 K@@ @@@ 3@3H@A@@гQ!tM 6 OM 6 P@@ @@@ @@@@@ @@  @@@M 6 8 @@P@@@@,remove_primsgN Q WN Q c@б@гt!tN Q fN Q g@@ @@@ 3@3H@A@@б@гΠ#intN Q kN Q n@@ @@@ @@г!tN Q rN Q s@@ @@@ @@@@@ @@ # @@@+@@  @@ (.@@@-N Q S@@9Q@@@@.-remove_branchh8O t z9O t @б@г!tCO t DO t @@ @@@ 321122222@G\@A@@гɠ!tRO t SO t @@ @@@ @@@@@ @@  @@@_O t v @@kR@@@@7direct_call_of_indirectijP  kP  @б@г점!tuP  vP  @@ @@@ 3dccddddd@3H@A@@г!tP  P  @@ @@@ @@@@@ @@  @@@P   @@S@@@@0requested_inlinejQ  Q  @б@г!tQ  Q  @@ @@@ 3@3H@A@@б'size_ofгR!t'FlambdaQ  Q  @ Q  Q  @@@@@@  @@гG!tQ  Q  @@ @@@ )@@'@@ @@ .Q   @@@7@@  @@ 4:@@@Q  @@T@@@@:+remove_codekS  S  @б@г!t'FlambdaS  S  @ S  S  @@@@@@ 3@\q(@A @@б@г!tS  S  @@ @@@ @@г!t S  !S  @@ @@@ @@@@@ @@ # @@@+@@  @@ (3@@@2S  @@>U@@@@.1remove_code_namedl=T  >T  -@б@г%named'FlambdaLT  0MT  7@ PT  8QT  =@@@@@@ 3@??@@@@@@Pn(@A @@б@г٠!tbT  AcT  B@@ @@@ @@г栐!toT  FpT  G@@ @@@ @@@@@ @@ # @@@+@@  @@ (3@@@T  @@V@@@@.1remove_projectionU H NU H _@б@г*Projection!t*ProjectionU H bU H l@ U H mU H n@@@@@@ 3@Rp*@A @@б@г*!tU H rU H s@@ @@@ @@г7!tU H wU H x@@ @@@ @@@@@ @@ # @@@+@@  @@ (3@@@U H J@@W@@@@.(add_codeW z W z @б@г!t'FlambdaW z W z @ W z W z @@@@@@ 3@Pp(@A @@б@гy!tW z W z @@ @@@ @@г!tW z W z @@ @@@ @@@@@ @@ # @@@+@@  @@ (3@@@!W z |@@-X@@@@..add_code_named,X  -X  @б@г%named'Flambda;X  <X  @ ?X  @X  @@@@@@ 3/../////@Pn(@A @@б@гȠ!tQX  RX  @@ @@@ @@гՠ!t^X  _X  @@ @@@ @@@@@ @@ # @@@+@@  @@ (3@@@pX  @@|Y@@@@..add_projection{Y  |Y  @б@г!t*ProjectionY  Y  @ Y  Y  @@@@@@ 3~}}~~~~~@Pn(@A @@б@г!tY  Y  @@ @@@ @@г$!tY  Y  @@ @@@ @@@@@ @@ # @@@+@@  @@ (3@@@Y  @@Z@@@@.%print+[ [ @б@г-&Format)formatter[  [ @ [ [ @@@@@@3@Pn(@A @@б@гf!t[ [  @@ @@@@@г$unit[ $[ (@@ @@@@@@@@@@# @@@+@@ @@(3@@@ [  @@ [@@@@.@A@~i@b%@@@j@c:@3@@@F@?@@]@V@ @v@o)@@3        @Sq+@A'3 " ! ! " " " " "@@A :}  . ;\),@@@ =}  @@:Whether_sufficient_benefit3E I^.5 J^.O@ Vc@@БA+!t-F Xb Yb@@;@@A@@@@@ \b@@@@ h]@@@A@@@3 H G G H H H H H@@A@@v@o@@@@G@@@@@J@C@@a@Z@ @z@@@J @A+.@&create. d d@б(originalг4!t'Flambda e e@  e e@@@@@@3        @MXR@A @@б(toplevelг W$bool f f@@ @@@@@б,branch_depthг #int g g@@ @@@$@@б@гp!t'Flambda h! h(@  h) h*@@@@@@< @@б'benefitгz!t'Benefit i+: i+A@  i+B i+C@@@@@@V @@б'liftingг $bool jDS jDW@@ @@@g@@б%roundг ݠ#int kXe kXh@@ @@@x@@гҠ!t *lip +liq@@ @@@@@@@@@ 5kX_ @@5,@@ @@ ;jDK@@UC@@  @@! Ai+2@@@c@@" @@#k@@@@$ @@% Lg "@@@@& @@' Rf(@@@@( @@) Xe.@@@ [d1@@ g^@@3@@/create_estimate/ fnsy gns@б-original_sizeг 3#int so to@@ @@@*3 b a a b b b b b@!@A@@б(toplevelг %$bool p p@@ @@@+@@б,branch_depthг W#int q q@@ @@@,$@@б(new_sizeг h#int r r@@ @@@-5@@б'benefitгA!t'Benefit s s@  s s@@@@@@.O @@б'liftingг r$bool t  t@@ @@@/`@@б%roundг #int u u!@@ @@@0q@@г!t v") v"*@@ @@@1~@@@@2@@3 u @@5,@@4 @@5 t@@UC@@6 @@7 s@@lc@@8 @@9 r@@z@@: @@; q#@@@@< @@= p)@@@@> @@? o/@@@ #nsu2@@ /_@@4@@(evaluate0 .x,2 /x,:@б@г᠐!t 9x,= :x,>@@ @@@@3 ( ' ' ( ( ( ( (@@A@@г 砐$bool Hx,B Ix,F@@ @@@A@@@@@B@@C @@@ Ux,. @@ a`@@@@)to_string1 `zHN azHW@б@г!t kzHZ lzH[@@ @@@D3 Z Y Y Z Z Z Z Z@3H@A@@г +&string zzH_ {zHe@@ @@@E@@@@@F@@G @@@ zHJ @@ a@@@@1print_description2 |gm |g~@б,subfunctionsг >$bool |g |g@@ @@@H3        @5J!@A@@б@г &Format)formatter |g |g@  |g |g@@@@@@I @@б@гp!t |g |g@@ @@@J)@@г c$unit |g |g@@ @@@K6@@@@@L@@M; @@@)@@N @@O@1@@QH@@P @@QE |g@@@ |gi@@ b@@@@L@A@i@@@u@n@@3        @Yp@A3        @@A ^.R }@@@ ^..@@9scale_inline_threshold_by4  @г נ#int  @@ @@@R3        @@A@@@@@A@@@)@A@@@ /@@ ;d@@@@;default_toplevel_multiplier5 : ;@г #int C D@@ @@@S3 2 1 1 2 2 2 2 2@-@@A@@@ M @@ Ye@@ @@0direct_call_size6 X  Y@г !#int a b@@ @@@T3 P O O P P P P P@2@A@@@ k @@ wf@@ @@ )maximum_interesting_size_of_function_body7 v w@б@г A#int  @@ @@@U3 p o o p p p p p@!4@A@@г P#int  @@ @@@V@@@@@W@@X @@@  @ s If a function body exceeds this size, we can make a fast decision not to inline it (see [Inlining_decision]).  !! k@@@@@@@ g@@@  p@@@@@@3/lambda_smaller'8  @б@г d$expr'Flambda  @   @@@@@@Y3        @UjA@A @@б$thanг #int  @@ @@@Z@@г 3&option  @г #int  @@ @@@[*@@@@@@]/ @@-$@@^ @@_4 @@@=@@` @@a:E@@@ "@ ' Measure the given expression to determine whether its size is at or below the given threshold. [None] is returned if it is too big; otherwise [Some] is returned with the measured size.  $ %m@@@@@@@ 1h@@2@ 7 ꐠ@@@@@@Y+lambda_size9 ; <@б@г $expr'Flambda J K@  N O@@@@@@b3 > = = > > > > >@{A@A @@г #int ^ _@@ @@@c@@@@@d@@e @@@ k @@ wi@@@@@ @ #@  @@  @  @ @A@<@@6@}@x0@@sP@I4@-@@p@P@@3 q p p q q q q q@4R @A@ 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@ e* Measurement of the cost (including cost in space) of Flambda terms in the context of inlining.  . {* The maximum size, in some abstract measure of space cost, that an Flambda expression may be in order to be inlined.  렠 Determine whether the given Flambda expression has a sufficiently low space cost so as to fit under the given [inlining_threshold]. The [bonus] is added to the threshold before evaluation.  eff g/@ CR-soon mshinwell for pchambart: I think the name of this function might be misleading. It should probably reflect the functionality it provides, not the use to which it is put in another module.  nzz pJ@ @ As for [can_inline], but returns the decision as an inlining threshold. If [Never_inline] is returned, the expression was too large for the input [inlining_threshold]. Otherwise, [Can_inline_if_no_larger_than] is returned, with the constructor argument being the measured estimated size of the expression.  qKK u w @ A model of the benefit we gain by removing a particular combination of operations. Such removals are typically performed by inlining (for example, [remove_call]) and simplification (for example, [remove_alloc]) passes.  ~ 2 4A  $@ { CR-soon mshinwell: [remove_alloc] should take the size of the block (to account for removal of initializing writes). J  K  @ ^ Evaluation of the benefit of removing certain operations against an inlining threshold.  _VX `@ t* If a function body exceeds this size, we can make a fast decision not to inline it (see [Inlining_decision]). g * Measure the given expression to determine whether its size is at or below the given threshold. [None] is returned if it is too big; otherwise [Some] is returned with the measured size. @-./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"-cNO 9/builds/workspace/main/flambda/false/label/ocaml-linux-32 >10/.-,+*)('&%$#"! @@0O⥀#|M}3VUUVVVVV@T@@/Allocated_const0/vVǟx(Asttypes0eT$BbRM dc5Build_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 I0VJ͟*Format_doc0uy@GmWUࠠ%Ident0>ЃzV)j⠠,Identifiable0]/*N Ґ0i(wypP1 󰠠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``ll0Static_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{&@0i(wypP1 AjT'U`@@  ,@@ʐ, ( V@@ \   @@ذ @@@ t Ͱ  3@@j  u@ J x ې @P X b " d  @  "@0l  @o L@ܰ^  @   ~ @ߐ*@@@@@!n g s@@  @@<  D@˰@@P@@