Move Semantics_of_primitives to bytecomp/ and use it in closure.
parent
6ee0d0538b
commit
5dce0914e2
22
.depend
22
.depend
|
@ -1134,11 +1134,11 @@ asmcomp/strmatch.cmx : bytecomp/lambda.cmx typing/ident.cmx \
|
|||
middle_end/debuginfo.cmx asmcomp/cmm.cmx asmcomp/arch.cmx \
|
||||
asmcomp/strmatch.cmi
|
||||
asmcomp/strmatch.cmi : middle_end/debuginfo.cmi asmcomp/cmm.cmi
|
||||
asmcomp/un_anf.cmo : middle_end/semantics_of_primitives.cmi \
|
||||
asmcomp/un_anf.cmo : bytecomp/semantics_of_primitives.cmi \
|
||||
asmcomp/printclambda.cmi utils/misc.cmi bytecomp/lambda.cmi \
|
||||
typing/ident.cmi middle_end/debuginfo.cmi utils/clflags.cmi \
|
||||
asmcomp/clambda.cmi parsing/asttypes.cmi asmcomp/un_anf.cmi
|
||||
asmcomp/un_anf.cmx : middle_end/semantics_of_primitives.cmx \
|
||||
asmcomp/un_anf.cmx : bytecomp/semantics_of_primitives.cmx \
|
||||
asmcomp/printclambda.cmx utils/misc.cmx bytecomp/lambda.cmx \
|
||||
typing/ident.cmx middle_end/debuginfo.cmx utils/clflags.cmx \
|
||||
asmcomp/clambda.cmx parsing/asttypes.cmi asmcomp/un_anf.cmi
|
||||
|
@ -1251,10 +1251,10 @@ middle_end/closure_conversion_aux.cmi : middle_end/base_types/variable.cmi \
|
|||
middle_end/debuginfo.cmo : parsing/location.cmi middle_end/debuginfo.cmi
|
||||
middle_end/debuginfo.cmx : parsing/location.cmx middle_end/debuginfo.cmi
|
||||
middle_end/debuginfo.cmi : parsing/location.cmi
|
||||
middle_end/effect_analysis.cmo : middle_end/semantics_of_primitives.cmi \
|
||||
middle_end/effect_analysis.cmo : bytecomp/semantics_of_primitives.cmi \
|
||||
utils/misc.cmi bytecomp/lambda.cmi middle_end/flambda.cmi \
|
||||
middle_end/effect_analysis.cmi
|
||||
middle_end/effect_analysis.cmx : middle_end/semantics_of_primitives.cmx \
|
||||
middle_end/effect_analysis.cmx : bytecomp/semantics_of_primitives.cmx \
|
||||
utils/misc.cmx bytecomp/lambda.cmx middle_end/flambda.cmx \
|
||||
middle_end/effect_analysis.cmi
|
||||
middle_end/effect_analysis.cmi : middle_end/flambda.cmi
|
||||
|
@ -1733,11 +1733,11 @@ middle_end/remove_unused_program_constructs.cmx : \
|
|||
middle_end/effect_analysis.cmx \
|
||||
middle_end/remove_unused_program_constructs.cmi
|
||||
middle_end/remove_unused_program_constructs.cmi : middle_end/flambda.cmi
|
||||
middle_end/semantics_of_primitives.cmo : bytecomp/printlambda.cmi \
|
||||
utils/misc.cmi bytecomp/lambda.cmi middle_end/semantics_of_primitives.cmi
|
||||
middle_end/semantics_of_primitives.cmx : bytecomp/printlambda.cmx \
|
||||
utils/misc.cmx bytecomp/lambda.cmx middle_end/semantics_of_primitives.cmi
|
||||
middle_end/semantics_of_primitives.cmi : bytecomp/lambda.cmi
|
||||
bytecomp/semantics_of_primitives.cmo : bytecomp/printlambda.cmi \
|
||||
utils/misc.cmi bytecomp/lambda.cmi bytecomp/semantics_of_primitives.cmi
|
||||
bytecomp/semantics_of_primitives.cmx : bytecomp/printlambda.cmx \
|
||||
utils/misc.cmx bytecomp/lambda.cmx bytecomp/semantics_of_primitives.cmi
|
||||
bytecomp/semantics_of_primitives.cmi : bytecomp/lambda.cmi
|
||||
middle_end/share_constants.cmo : middle_end/base_types/symbol.cmi \
|
||||
middle_end/flambda_iterators.cmi middle_end/flambda.cmi \
|
||||
middle_end/share_constants.cmi
|
||||
|
@ -1790,14 +1790,14 @@ middle_end/simplify_common.cmi : middle_end/simple_value_approx.cmi \
|
|||
middle_end/simplify_primitives.cmo : middle_end/base_types/tag.cmi \
|
||||
middle_end/base_types/symbol.cmi middle_end/simplify_common.cmi \
|
||||
middle_end/simplify_boxed_integer_ops.cmi \
|
||||
middle_end/simple_value_approx.cmi middle_end/semantics_of_primitives.cmi \
|
||||
middle_end/simple_value_approx.cmi bytecomp/semantics_of_primitives.cmi \
|
||||
utils/misc.cmi bytecomp/lambda.cmi middle_end/inlining_cost.cmi \
|
||||
middle_end/flambda.cmi utils/clflags.cmi parsing/asttypes.cmi \
|
||||
middle_end/simplify_primitives.cmi
|
||||
middle_end/simplify_primitives.cmx : middle_end/base_types/tag.cmx \
|
||||
middle_end/base_types/symbol.cmx middle_end/simplify_common.cmx \
|
||||
middle_end/simplify_boxed_integer_ops.cmx \
|
||||
middle_end/simple_value_approx.cmx middle_end/semantics_of_primitives.cmx \
|
||||
middle_end/simple_value_approx.cmx bytecomp/semantics_of_primitives.cmx \
|
||||
utils/misc.cmx bytecomp/lambda.cmx middle_end/inlining_cost.cmx \
|
||||
middle_end/flambda.cmx utils/clflags.cmx parsing/asttypes.cmi \
|
||||
middle_end/simplify_primitives.cmi
|
||||
|
|
|
@ -75,6 +75,7 @@ TYPING=typing/ident.cmo typing/path.cmo \
|
|||
typing/typemod.cmo
|
||||
|
||||
COMP=bytecomp/lambda.cmo bytecomp/printlambda.cmo \
|
||||
bytecomp/semantics_of_primitives.cmo \
|
||||
bytecomp/typeopt.cmo bytecomp/switch.cmo bytecomp/matching.cmo \
|
||||
bytecomp/translobj.cmo bytecomp/translattribute.cmo \
|
||||
bytecomp/translcore.cmo \
|
||||
|
@ -157,7 +158,6 @@ MIDDLE_END=\
|
|||
middle_end/base_types/export_id.cmo \
|
||||
middle_end/base_types/symbol.cmo \
|
||||
middle_end/pass_wrapper.cmo \
|
||||
middle_end/semantics_of_primitives.cmo \
|
||||
middle_end/allocated_const.cmo \
|
||||
middle_end/projection.cmo \
|
||||
middle_end/flambda.cmo \
|
||||
|
|
|
@ -201,92 +201,11 @@ let lambda_smaller lam threshold =
|
|||
with Exit ->
|
||||
false
|
||||
|
||||
let is_pure_prim = function
|
||||
(* Obvious side-effects *)
|
||||
| Psetglobal _ | Psetfield _ | Psetfloatfield _ | Pduprecord _
|
||||
| Poffsetref _ | Pbytessetu | Pbytessets
|
||||
| Parraysetu _ | Parraysets _ | Pbigarrayset _
|
||||
| Pccall _ | Praise _
|
||||
| Prevapply
|
||||
| Pdirapply
|
||||
| Plazyforce
|
||||
| Pstring_set_16 _
|
||||
| Pstring_set_32 _
|
||||
| Pstring_set_64 _
|
||||
| Pbigstring_set_16 _
|
||||
| Pbigstring_set_32 _
|
||||
| Pbigstring_set_64 _
|
||||
|
||||
(* can raise Division by zero *)
|
||||
| Pdivint _ | Pmodint _
|
||||
| Pdivbint _
|
||||
| Pmodbint _
|
||||
|
||||
(* can raise Out of bound *)
|
||||
| Parrayrefs _
|
||||
| Pstringrefs
|
||||
| Pbytesrefs
|
||||
| Pbigarrayref _
|
||||
| Pstring_load_16 _
|
||||
| Pstring_load_32 _
|
||||
| Pstring_load_64 _
|
||||
| Pbigstring_load_16 _
|
||||
| Pbigstring_load_32 _
|
||||
| Pbigstring_load_64 _
|
||||
|
||||
-> false
|
||||
|
||||
(* Pure primitives *)
|
||||
| Pidentity
|
||||
| Pbytes_to_string
|
||||
| Pbytes_of_string
|
||||
| Pignore
|
||||
| Ploc _
|
||||
| Pgetglobal _
|
||||
| Pmakeblock _
|
||||
| Pfield _
|
||||
| Pfloatfield _
|
||||
| Psequand | Psequor | Pnot
|
||||
| Pnegint | Paddint | Psubint | Pmulint
|
||||
| Pandint | Porint | Pxorint
|
||||
| Plslint | Plsrint | Pasrint
|
||||
| Pintcomp _
|
||||
| Poffsetint _
|
||||
| Pintoffloat | Pfloatofint
|
||||
| Pnegfloat | Pabsfloat
|
||||
| Paddfloat | Psubfloat | Pmulfloat | Pdivfloat
|
||||
| Pfloatcomp _
|
||||
| Pstringrefu
|
||||
| Parrayrefu _
|
||||
| Pstringlength
|
||||
| Pbyteslength | Pbytesrefu
|
||||
| Pmakearray _
|
||||
| Pduparray _
|
||||
| Parraylength _
|
||||
| Pisint
|
||||
| Pisout
|
||||
| Pbittest
|
||||
| Pbintofint _
|
||||
| Pintofbint _
|
||||
| Pcvtbint _
|
||||
| Pnegbint _
|
||||
| Paddbint _
|
||||
| Psubbint _
|
||||
| Pmulbint _
|
||||
| Pandbint _
|
||||
| Porbint _
|
||||
| Pxorbint _
|
||||
| Plslbint _
|
||||
| Plsrbint _
|
||||
| Pasrbint _
|
||||
| Pbintcomp _
|
||||
| Pbigarraydim _
|
||||
| Pctconst _
|
||||
| Pbswap16
|
||||
| Pbbswap _
|
||||
| Pint_as_pointer
|
||||
| Popaque ->
|
||||
true
|
||||
let is_pure_prim p =
|
||||
let open Semantics_of_primitives in
|
||||
match Semantics_of_primitives.for_primitive p with
|
||||
| (No_effects | Only_generative_effects), _ -> true
|
||||
| Arbitrary_effects, _ -> false
|
||||
|
||||
(* Check if a clambda term is ``pure'',
|
||||
that is without side-effects *and* not containing function definitions *)
|
||||
|
|
Loading…
Reference in New Issue