summaryrefslogtreecommitdiff
path: root/asmcomp/selectgen.ml
diff options
context:
space:
mode:
authorDamien Doligez <damien.doligez-inria.fr>2014-03-31 17:58:53 +0000
committerDamien Doligez <damien.doligez-inria.fr>2014-03-31 17:58:53 +0000
commit8643356b8542e0dcab358716f1e04d47b08b1a6d (patch)
treee10cc5a03f7ead69a2d4ed563cbd021df5770ef2 /asmcomp/selectgen.ml
parentcd1bf4b9fc898cee2f4886ed18ddf6271ec522e8 (diff)
parent989ac0b2635443b9c0f183ee6343b663c854f4ea (diff)
downloadocaml-ephemeron.tar.gz
merge with trunk at rev 14512ephemeron
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/ephemeron@14514 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'asmcomp/selectgen.ml')
-rw-r--r--asmcomp/selectgen.ml16
1 files changed, 11 insertions, 5 deletions
diff --git a/asmcomp/selectgen.ml b/asmcomp/selectgen.ml
index 8f1277a17e..0f1277f758 100644
--- a/asmcomp/selectgen.ml
+++ b/asmcomp/selectgen.ml
@@ -85,7 +85,7 @@ let swap_intcomp = function
let all_regs_anonymous rv =
try
for i = 0 to Array.length rv - 1 do
- if String.length rv.(i).name > 0 then raise Exit
+ if not (Reg.anonymous rv.(i)) then raise Exit
done;
true
with Exit ->
@@ -93,10 +93,11 @@ let all_regs_anonymous rv =
let name_regs id rv =
if Array.length rv = 1 then
- rv.(0).name <- Ident.name id
+ rv.(0).raw_name <- Raw_name.create_from_ident id
else
for i = 0 to Array.length rv - 1 do
- rv.(i).name <- Ident.name id ^ "#" ^ string_of_int i
+ rv.(i).raw_name <- Raw_name.create_from_ident id;
+ rv.(i).part <- Some i
done
(* "Join" two instruction sequences, making sure they return their results
@@ -111,10 +112,10 @@ let join opt_r1 seq1 opt_r2 seq2 =
assert (l1 = Array.length r2);
let r = Array.create l1 Reg.dummy in
for i = 0 to l1-1 do
- if String.length r1.(i).name = 0 then begin
+ if Reg.anonymous r1.(i) then begin
r.(i) <- r1.(i);
seq2#insert_move r2.(i) r1.(i)
- end else if String.length r2.(i).name = 0 then begin
+ end else if Reg.anonymous r2.(i) then begin
r.(i) <- r2.(i);
seq1#insert_move r1.(i) r2.(i)
end else begin
@@ -391,6 +392,9 @@ method emit_expr env exp =
| Cconst_natint n ->
let r = self#regs_for typ_int in
Some(self#insert_op (Iconst_int n) [||] r)
+ | Cconst_blockheader n ->
+ let r = self#regs_for typ_int in
+ Some(self#insert_op (Iconst_blockheader n) [||] r)
| Cconst_float n ->
let r = self#regs_for typ_float in
Some(self#insert_op (Iconst_float n) [||] r)
@@ -433,6 +437,8 @@ method emit_expr env exp =
Some(self#emit_tuple ext_env simple_list)
end
| Cop(Craise (k, dbg), [arg]) ->
+ if !Clflags.debug && k <> Lambda.Raise_notrace then
+ Proc.contains_calls := true; (* PR#6239 *)
begin match self#emit_expr env arg with
None -> None
| Some r1 ->