diff --git a/src/passes.ml b/src/passes.ml index 9ef98b4..6d4494f 100644 --- a/src/passes.ml +++ b/src/passes.ml @@ -87,11 +87,17 @@ let generate_stack_ir = "generate-stack-ir" (** refine the types of globals *) let global_refining = "global-refining" +(** globally optimize struct values *) +let gsi = "gsi" + (** globally optimize GC types *) let gto = "gto" -(** globally optimize struct values *) -let gsi = "gsi" +(** Grand Unified Flow Analysis: optimize the entire program using information about what content can actually appear in each location *) +let gufa = "gufa" + +(** GUFA plus local optimizations in functions we modified *) +let gufa_optimizing = "gufa-optimizing" (** apply more specific subtypes to type fields where possible *) let type_refining = "type-refining" diff --git a/src/passes.mli b/src/passes.mli index b74a745..44c612a 100644 --- a/src/passes.mli +++ b/src/passes.mli @@ -87,11 +87,17 @@ val generate_stack_ir : t val global_refining : t (** refine the types of globals *) +val gsi : t +(** globally optimize struct values *) + val gto : t (** globally optimize GC types *) -val gsi : t -(** globally optimize struct values *) +val gufa : t +(** Grand Unified Flow Analysis: optimize the entire program using information about what content can actually appear in each location *) + +val gufa_optimizing : t +(** GUFA plus local optimizations in functions we modified *) val type_refining : t (** apply more specific subtypes to type fields where possible *) diff --git a/test/test.ml b/test/test.ml index 216d6a1..593bfe3 100644 --- a/test/test.ml +++ b/test/test.ml @@ -234,7 +234,13 @@ let new_mod = Module.read byts let _ = Module.run_passes new_mod - [ Passes.name_types; Passes.merge_similar_functions; Passes.spill_pointers ] + [ + Passes.name_types; + Passes.merge_similar_functions; + Passes.spill_pointers; + Passes.gufa; + Passes.gufa_optimizing; + ] let _ = Module.set_features new_mod