From e61e84579869cecd6ee0f4ac40d750eeedd6d80f Mon Sep 17 00:00:00 2001 From: xleroy Date: Wed, 8 May 2013 07:58:40 +0000 Subject: Add interferences at function entry with destroyed_at_function_entry. Improve dead code elimination for Xparmove. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2241 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- backend/Regalloc.ml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'backend') diff --git a/backend/Regalloc.ml b/backend/Regalloc.ml index fe981e3..179b2cc 100644 --- a/backend/Regalloc.ml +++ b/backend/Regalloc.ml @@ -314,8 +314,11 @@ let dce_instr instr after k = then instr :: k else k | Xparmove(srcs, dsts, itmp, ftmp) -> - let (srcs', dsts') = dce_parmove srcs dsts after in - Xparmove(srcs', dsts', itmp, ftmp) :: k + begin match dce_parmove srcs dsts after with + | ([], []) -> k + | ([src], [dst]) -> Xmove(src, dst) :: k + | (srcs', dsts') -> Xparmove(srcs', dsts', itmp, ftmp) :: k + end | Xop(op, args, res) -> if VSet.mem res after then instr :: k @@ -537,6 +540,9 @@ let find_coloring f liveness = PTree.fold (fun () pc blk -> ignore (add_interfs_block g blk (PMap.get pc liveness))) f.fn_code (); + add_interfs_destroyed g + (transfer_live f f.fn_entrypoint (PMap.get f.fn_entrypoint liveness)) + destroyed_at_function_entry; IRC.coloring g -- cgit v1.2.3