Skip to content

Commit ff4611e

Browse files
committed
Merge flambda-backend changes
2 parents 81e9879 + 8914940 commit ff4611e

File tree

9 files changed

+48
-18
lines changed

9 files changed

+48
-18
lines changed

asmcomp/comballoc.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ let rec combine i allocstate =
6363
i.arg i.res i.dbg next, allocstate)
6464
end
6565
| Iop(Icall_ind | Icall_imm _ | Iextcall _ |
66-
Itailcall_ind | Itailcall_imm _ | Iprobe _) ->
66+
Itailcall_ind | Itailcall_imm _ | Iprobe _ |
67+
Iintop Icheckbound | Iintop_imm (Icheckbound, _)) ->
6768
let newnext = combine_restart i.next in
6869
(instr_cons_debug i.desc i.arg i.res i.dbg newnext,
6970
allocstate)

asmcomp/selectgen.ml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,13 +325,14 @@ method is_simple_expr = function
325325
| Cop(op, args, _) ->
326326
begin match op with
327327
(* The following may have side effects *)
328-
| Capply _ | Cextcall _ | Calloc | Cstore _ | Craise _ | Cprobe _
329-
| Cprobe_is_enabled _ | Copaque -> false
328+
| Capply _ | Cextcall _ | Calloc | Cstore _
329+
| Craise _ | Ccheckbound
330+
| Cprobe _ | Cprobe_is_enabled _ | Copaque -> false
330331
(* The remaining operations are simple if their args are *)
331332
| Cload _ | Caddi | Csubi | Cmuli | Cmulhi | Cdivi | Cmodi | Cand | Cor
332333
| Cxor | Clsl | Clsr | Casr | Ccmpi _ | Caddv | Cadda | Ccmpa _ | Cnegf
333334
| Cabsf | Caddf | Csubf | Cmulf | Cdivf | Cfloatofint | Cintoffloat
334-
| Ccmpf _ | Ccheckbound -> List.for_all self#is_simple_expr args
335+
| Ccmpf _ -> List.for_all self#is_simple_expr args
335336
end
336337
| Cassign _ | Cifthenelse _ | Cswitch _ | Ccatch _ | Cexit _
337338
| Ctrywith _ -> false

driver/main_args.ml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -803,10 +803,6 @@ let mk_dcamlprimc f =
803803
"-dcamlprimc", Arg.Unit f, " (undocumented)"
804804
;;
805805

806-
let mk_dcfg f =
807-
"-dcfg", Arg.Unit f, " (undocumented)"
808-
;;
809-
810806
let mk_dcmm_invariants f =
811807
"-dcmm-invariants", Arg.Unit f, " Extra sanity checks on Cmm"
812808
;;
@@ -1121,7 +1117,6 @@ module type Optcommon_options = sig
11211117
val _dflambda_verbose : unit -> unit
11221118
val _drawclambda : unit -> unit
11231119
val _dclambda : unit -> unit
1124-
val _dcfg : unit -> unit
11251120
val _dcmm_invariants : unit -> unit
11261121
val _dcmm : unit -> unit
11271122
val _dsel : unit -> unit
@@ -1496,7 +1491,6 @@ struct
14961491
mk_dflambda_let F._dflambda_let;
14971492
mk_dflambda_verbose F._dflambda_verbose;
14981493

1499-
mk_dcfg F._dcfg;
15001494
mk_dcmm F._dcmm;
15011495
mk_dsel F._dsel;
15021496
mk_dcombine F._dcombine;
@@ -1606,7 +1600,6 @@ module Make_opttop_options (F : Opttop_options) = struct
16061600
mk_dcmm_invariants F._dcmm_invariants;
16071601
mk_drawflambda F._drawflambda;
16081602
mk_dflambda F._dflambda;
1609-
mk_dcfg F._dcfg;
16101603
mk_dcmm F._dcmm;
16111604
mk_dsel F._dsel;
16121605
mk_dcombine F._dcombine;
@@ -1787,7 +1780,6 @@ module Default = struct
17871780
let _dalloc = set dump_regalloc
17881781
let _davail () = dump_avail := true
17891782
let _dclambda = set dump_clambda
1790-
let _dcfg = set dump_cfg
17911783
let _dcmm = set dump_cmm
17921784
let _dcmm_invariants = set cmm_invariants
17931785
let _dcombine = set dump_combine

driver/main_args.mli

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,6 @@ module type Optcommon_options = sig
205205
val _dflambda_verbose : unit -> unit
206206
val _drawclambda : unit -> unit
207207
val _dclambda : unit -> unit
208-
val _dcfg : unit -> unit
209208
val _dcmm_invariants : unit -> unit
210209
val _dcmm : unit -> unit
211210
val _dsel : unit -> unit

parsing/extensions.ml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ let structure_item_of_expr ~loc expr =
4343
pstr_loc=loc;
4444
}
4545

46-
let map_comprehension ~loc extension_name body comp_list : extension=
46+
let map_comprehension ~loc:orig_loc extension_name body comp_list : extension =
47+
let loc = { orig_loc with Location.loc_ghost = true } in
4748
(*This is unreachable and just used as a place holder.*)
4849
let unreachable =
4950
{
@@ -86,7 +87,7 @@ let map_comprehension ~loc extension_name body comp_list : extension=
8687
) comp_list
8788
in
8889
let payload = PStr((structure_item_of_expr ~loc body)::list) in
89-
{ txt=extension_name; loc; }, payload
90+
{ txt=extension_name; loc=orig_loc; }, payload
9091

9192
let unwrap_expression ~loc = function
9293
| Pstr_eval(exp, _) -> exp
@@ -162,7 +163,7 @@ let report_error ~loc = function
162163
| Extension_not_existent extension_name ->
163164
Location.errorf ~loc "Extension %s does not exsist." extension_name
164165
| Illegal_comprehension_extension_construct ->
165-
Location.errorf ~loc "Wrong extension sytax for comprehensions."
166+
Location.errorf ~loc "Wrong extension syntax for comprehensions."
166167

167168
let () =
168169
Location.register_error_of_exn
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
(* TEST
2+
* native *)
3+
4+
let glob = ref (1, 2)
5+
let[@inline never] combine1 x a =
6+
begin try
7+
glob := (2, x);
8+
glob := (3, a.(4));
9+
with
10+
| Invalid_argument _ -> ()
11+
end;
12+
!glob
13+
14+
let[@inline never] combine2 x a =
15+
let loc = ref (1, 2) in
16+
begin try
17+
loc := (2, x);
18+
loc := (3, a.(4));
19+
with
20+
| Invalid_argument _ -> ()
21+
end;
22+
!loc
23+
24+
let[@inline never] measure f =
25+
let empty_array = [| |] in
26+
let prebefore = Gc.minor_words () in
27+
let before = Gc.minor_words () in
28+
let r = f 42 empty_array in
29+
assert (r = (2, 42));
30+
let after = Gc.minor_words () in
31+
((after -. before) -. (before -. prebefore))
32+
33+
34+
let () =
35+
Printf.printf "%10s: %.0f\n" "combine1" (measure combine1);
36+
Printf.printf "%10s: %.0f\n" "combine2" (measure combine2)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
combine1: 3
2+
combine2: 3

utils/clflags.ml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ let optimize_for_speed = ref true (* -compact *)
116116
and opaque = ref false (* -opaque *)
117117

118118
and dump_cmm = ref false (* -dcmm *)
119-
let dump_cfg = ref false (* -dcfg *)
120119
let dump_selection = ref false (* -dsel *)
121120
let dump_cse = ref false (* -dcse *)
122121
let dump_live = ref false (* -dlive *)

utils/clflags.mli

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ val dump_instr : bool ref
121121
val keep_camlprimc_file : bool ref
122122
val keep_asm_file : bool ref
123123
val optimize_for_speed : bool ref
124-
val dump_cfg : bool ref
125124
val dump_cmm : bool ref
126125
val dump_selection : bool ref
127126
val dump_cse : bool ref

0 commit comments

Comments
 (0)