Caml1999I037 (Dataflow&DOMAIN.!t1;@@@A@@@@@4asmcomp/dataflow.mliTT@@@@@@A@#bot2@@@@UU@@ A@@$join3@@@@@@@@@@@@@@@@$V%V@@6B@@)lessequal4@%@@@@*@@@$boolE@@@@@@@@=W>W@@OC@@@@ASBX@SD@@Ӡ(Backward/@!D0\'analyze5*exnhandler&optionL@!t@@@!t@@@@@@@@)exnescape!t@@@@@@(transfer@$Mach+instruction@@@$next+!t@@@#exn4!t@@@9!t@@@@@@@@@@!+instruction@@@@J!t@@@@@#intA@@@Y!t@@@@@@@@@@@@@@@@^~b>_@@L@@@@\\\Z@M@@@@)(Dataflow05!bv'X86_ast058ߺ<%RӠ(Warnings0mJɒkgrs-Stdlib__Uchar056uf4[_+Stdlib__Sys0 -ռ鱦s5/.Stdlib__String0*%"e+Outcometree0euWS~d栠$Misc0ob]6>Vê>$Mach0( C'~A̠)Longident0s `7mɕc(Location0a7cK_H%9)Load_path0I@18 ~&Lambda0z1x]&ZT,Identifiable0 {d\FX'`%Ident0">WA+9*X*Format_doc0]mWϓ:Mݠ#Env0zV L{YWI)Debuginfo0PtJ=^w/*Data_types0I'Ue`wq]Ѡ#Cmm0rhmsT4u%{*Cmi_format0c˯7͗ԩmݠ0CamlinternalLazy0&͂7 Pˆ8CamlinternalFormatBasics0%FU(Q/Tu5Build_path_prefix_map0z HkGs+Backend_var0G}afTd(Asttypes0>n{T8cئ$Arch0;:1-K^1ʹ*}@@@Caml1999T037/lC(Dataflow&DOMAINB4asmcomp/dataflow.mliSS@D@БA+!tATT@@;@@@A@@@@@T@@@@#@@@@A@@@3@@@@@@#intA;@@@A@@@@@&_none_@@A@A@$charB;@@A@@@@@@A@&stringQ;@@ A@@@@@ @@@%bytesC;@@A@@@@@@@@%floatD;@@A@@@@@@@@$boolE;@@%falsec@@@$trued@@#@@@A@@@@@$@A@$unitF;@@"()e@@.@@@A@@@@@/@A@ #exnG;@@@A@@@@@3@@@#effH;@@O@A@A@@@@@@<@@@,continuationI;@@Q@@P@B@A@nY@@@@@@K@@@%arrayJ;@@R@A@A@@@@@@U@@@ $listK;@@S@A"[]f@@b@"::g@@@T@@o@ @@A@Y@@@@@r@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.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@@A54@)Not_foundZ#O@@@A =<@-Out_of_memoryW#W@@@AED@.Stack_overflow^#_@@@AML@.Sys_blocked_io_#g@@@A$U'T'@)Sys_error[#o@j@@A-^0]0@:Undefined_recursive_modulea#x@@w@s@u@@h@@A>oAnA@:Continuation_already_takenb#@@@AFwIvI@&Stdlib@Az~@#botUU@г!tUU@@ @@@3@@A@@@U @@A@@ @@$joinVV@б@г!tVV@@ @@@3@!4@A@@б@г!tVV@@ @@@@@гΠ!tVV@@ @@@@@@@@!@@@'@@$* @@@V@@B@@@@*)lessequalWW@б@г!tWW@@ @@@3@CX@A@@б@г!tWW@@ @@@@@гǠ$bool!W "W@@ @@@@@@@@!@@@'@@$* @@@/W@@Mrb>N@ ub>Ovb>P@@@@@@ް @@@б@гE#intb>Tb>W@@ @@@@@г;!t!Db>[b>\@ b>]b>^@@@@@@ @@@@@ @@@@2@ @@<b>_@@@R @@Z@@l@@`@@@@@ @@_@@<  @@@@@'^~@@ @^~@@L@@@@.@Q@@3@1S @A3@3@A\\yZ@@p3@o@A@@@\\\@@@@@@@ @@@3@|@o%@@@@A@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Xavier Leroy, projet Cambium, INRIA Paris E44E4@ H  FF@ H Copyright 2021 Institut National de Recherche en Informatique et GG@ H en Automatique. HHg@ H Ihh Ih@ H All rights reserved. This file is distributed under the terms of %J&J@ H the GNU Lesser General Public License version 2.1, with the +K,KN@ H special exception on linking described in the file LICENSE. 1LOO2LO@ H 7M8M@ H************************************************************************=N>N5@ l An abstract domain for dataflow analysis. Defines a type [t] of abstractions, with lattice operations. CP77DQx@ A Build a backward dataflow analysis engine for the given domain. IZJZZ@ & [analyze ~exnhandler ~transfer instr] performs a backward dataflow analysis on the Mach instruction [instr], typically a function body. It returns a pair of - the abstract state at the function entry point; - a mapping from catch handler label to the abstract state at the beginning of the handler with this label. The [transfer] function is called as [transfer i ~next ~exn]. - [i] is a sub-instruction of [instr]. - [next] is the abstract state "after" the instruction for normal control flow, falling through the successor(s) of [i]. - [exn] is the abstract state "after" the instruction for exceptional control flow, branching to the nearest exception handler or exiting the function with an unhandled exception. The [transfer] function, then, returns the abstract state "before" the instruction. The dataflow analysis will, then, propagate this state "before" as the state "after" the predecessor instructions. For compound instructions like [Iifthenelse], the [next] abstract value that is passed to [transfer] is not the abstract state at the end of the compound instruction (e.g. after the "then" and "else" branches have joined), but the join of the abstract states at the beginning of the sub-instructions. More precisely: - for [Iifthenelse(tst, ifso, ifnot)], it's the join of the abstract states at the beginning of the [ifso] and [ifnot] branches; - for [Iswitch(tbl, cases)], it's the join of the abstract states at the beginning of the [cases] branches; - for [Icatch(recflag, body, handlers)] and [Itrywith(body, handler)], it's the abstract state at the beginning of [body]. The [transfer] function is called for every sub-instruction of [instr], as many times as needed to reach a fixpoint. Hence, it can record the results of the analysis at each sub-instruction in a mutable data structure. For instance, the transfer function for liveness analysis updates the [live] fields of instructions as a side effect. The optional [exnhandler] argument deals with exception handlers. This is a function that transforms the abstract state at the beginning of an exception handler into the exceptional abstract state for the instructions within the body of the handler. Typically, for liveness analysis, it takes the registers live at the beginning of the handler and removes the register [Proc.loc_exn_bucket] that carries the exception value. If not specified, [exnhandler] defaults to the identity function. The optional [exnescape] argument deals with unhandled exceptions. It is the abstract state corresponding to exiting the function on an unhandled exception. It defaults to [D.bot]. OdacPX@@-./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"-I'asmcomp"-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\W0z XR[S3@@@$Arch0;:1-K^1ʹ*}(Asttypes0>n{T8cئ+Backend_var0G}afTd5Build_path_prefix_map0z HkGs8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ*Cmi_format0c˯7͗ԩmݠ#Cmm0rhmsT4u%{*Data_types0I'Ue`wq]Ѡ05!bv)Debuginfo0PtJ=^w/#Env0zV L{YWI*Format_doc0]mWϓ:Mݠ%Ident0">WA+9*X,Identifiable0 {d\FX'`&Lambda0z1x]&ZT)Load_path0I@18 ~(Location0a7cK_H%9)Longident0s `7mɕc#0( C'~A̠$Misc0ob]6>Vê>+Outcometree0euWS~d栠)Parsetree0Uҩ=p>*%"e$Path0Y2kf֯J._Ϡ)Primitive0²~$xzT෠#Reg0dfǝhO%Shape0oNՄBH&Stdlib0Lku]8_٠+Stdlib__Arg0اp2/٠r)w.Stdlib__Buffer08APF< t..Stdlib__Digest0l!LHgErζ .Stdlib__Domain0Hݶ/m.Stdlib__Either0Vy`u~c à.Stdlib__Format0ɢb tLir/Stdlib__Hashtbl0ѱN][/!,Stdlib__Lazy0* -S$.)"0D.Stdlib__Lexing0e<.V +Stdlib__Map0L5xE|O0~,J-.Stdlib__Result06 ]/J+Stdlib__Seq0nwzG&amg+Stdlib__Set0\$;7 .Stdlib__String0s)Targetint0!2JTI ϝ.Type_immediacy0A^abOhՠ%Types0xH+}q)Unit_info0ڀh%((Warnings0mJɒkgr