File tree 6 files changed +10
-18
lines changed 6 files changed +10
-18
lines changed Original file line number Diff line number Diff line change @@ -192,11 +192,10 @@ let as_var_set (formals : formal_parameter list) =
192
192
VarSet. of_list (as_var_list formals)
193
193
194
194
let as_var_map formals =
195
- let formals = VarSet. elements formals in
196
195
VariableMap. initial formals
197
196
198
197
let as_analysis_input (func :afunction ) (version :version ) =
199
- { formals = as_var_set func.formals; instrs = version.instrs }
198
+ { formals = as_var_list func.formals; instrs = version.instrs }
200
199
201
200
(* returns a 'pc -> pc set' computing reaching definitions *)
202
201
let reaching {formals; instrs} : pc -> PosSet.t =
@@ -302,7 +301,7 @@ let required_vars ({instrs} as inp : analysis_input) : pc -> variable list =
302
301
303
302
let aliased ({formals; instrs} : analysis_input ) : pc -> VarSet.t =
304
303
let ref_param params x = x :: params in
305
- let mut_formals = List. fold_left ref_param [] ( VarSet. elements formals) in
304
+ let mut_formals = List. fold_left ref_param [] formals in
306
305
fun _ -> VarSet. of_list mut_formals
307
306
308
307
module Expression = struct
Original file line number Diff line number Diff line change @@ -57,7 +57,7 @@ let infer ({formals; instrs} : analysis_input) : inferred_scope array =
57
57
let final_info = List. fold_left remove updated dropped in
58
58
{ sources = PcSet. singleton pc; info = final_info; }
59
59
in
60
- let initial = List. map (fun var -> (var, - 1 )) ( VarSet. elements formals) in
60
+ let initial = List. map (fun var -> (var, - 1 )) formals in
61
61
let initial_state = { sources = PcSet. empty; info = DeclSet. of_list initial; } in
62
62
let res = Analysis. forward_analysis initial_state instrs merge update in
63
63
fun pc -> (res pc).info in
Original file line number Diff line number Diff line change @@ -103,7 +103,7 @@ let const_fold : transform_instructions = fun {formals; instrs} ->
103
103
104
104
let initial_state =
105
105
let add_formal x st = VarMap. add x Unknown st in
106
- VarSet. fold add_formal formals VarMap. empty
106
+ VarSet. fold add_formal ( VarSet. of_list formals) VarMap. empty
107
107
in
108
108
Analysis. forward_analysis initial_state instrs merge update
109
109
in
Original file line number Diff line number Diff line change @@ -2,16 +2,6 @@ open Instr
2
2
open Edit
3
3
open Types
4
4
5
- (* Unlike `analysis_input`, this preserves the order of `formals`. This
6
- facilitates matching the formals to the arguments passed at a callsite.*)
7
- type inlining_input = {
8
- formals : variable list ;
9
- instrs : instructions ;
10
- }
11
-
12
- let as_inlining_input (func : afunction ) : inlining_input =
13
- { formals = Analysis. as_var_list func.formals; instrs = (active_version func).instrs }
14
-
15
5
type inlining_candidate = {
16
6
pos : pc ;
17
7
target : afunction ;
@@ -22,6 +12,9 @@ type inlining_candidate = {
22
12
}
23
13
and inlining_site = inlining_candidate list
24
14
15
+ let as_inlining_input (func : afunction ) =
16
+ { formals = Analysis. as_var_list func.formals; instrs = (active_version func).instrs }
17
+
25
18
26
19
(* FUNCTION INLINING *)
27
20
(* Given a program, inline the functions in it to the maximum possible extent.
@@ -66,7 +59,7 @@ let inline ({main; functions} as orig_prog : program) : program option =
66
59
in
67
60
loop 0 []
68
61
in
69
- let scope = Scope. infer {formals = VarSet. of_list callee.formals;
62
+ let scope = Scope. infer {formals = callee.formals;
70
63
instrs = callee.instrs;}
71
64
in
72
65
let returns = extract_returns instrs in
Original file line number Diff line number Diff line change @@ -57,7 +57,7 @@ let fix_scope : transform_instructions = fun {formals; instrs} ->
57
57
let dropped = Instr. dropped_vars instr in
58
58
VarSet. diff updated dropped
59
59
in
60
- let initial_state = formals in
60
+ let initial_state = VarSet. of_list formals in
61
61
let scope = Analysis. forward_analysis initial_state instrs merge update in
62
62
let succs = Analysis. successors instrs in
63
63
let transform pc =
Original file line number Diff line number Diff line change 1
1
open Instr
2
2
3
3
type analysis_input = {
4
- formals : VarSet .t ;
4
+ formals : variable list ;
5
5
instrs : instructions ;
6
6
}
7
7
You can’t perform that action at this time.
0 commit comments