From 62a07ee96d51c29bab9668d8c41bf5f8bdf9e23d Mon Sep 17 00:00:00 2001 From: xleroy Date: Thu, 18 Aug 2011 09:24:23 +0000 Subject: SimplVolatile: new pass to eliminate read-modify-write ops over volatiles Elsewhere: refactoring, moving common code into Cutil and Transform (to be continued) git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1716 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- cparser/PackedStructs.ml | 41 ++++------------------------------------- 1 file changed, 4 insertions(+), 37 deletions(-) (limited to 'cparser/PackedStructs.ml') diff --git a/cparser/PackedStructs.ml b/cparser/PackedStructs.ml index edd45ff..4b5d0e1 100644 --- a/cparser/PackedStructs.ml +++ b/cparser/PackedStructs.ml @@ -20,6 +20,7 @@ open C open Cutil open Env open Errors +open Transform type field_info = { fi_offset: int; (* byte offset within struct *) @@ -177,8 +178,6 @@ let bswap_write loc env lhs rhs ik = (* Expressions *) -type context = Val | Effects - let transf_expr loc env ctx e = let is_packed_access ty fieldname = @@ -284,45 +283,13 @@ let transf_expr loc env ctx e = (* Statements *) -let rec transf_stmt env s = - match s.sdesc with - | Sskip -> s - | Sdo e -> - {sdesc = Sdo(transf_expr s.sloc env Effects e); sloc = s.sloc} - | Sseq(s1, s2) -> - {sdesc = Sseq(transf_stmt env s1, transf_stmt env s2); sloc = s.sloc } - | Sif(e, s1, s2) -> - {sdesc = Sif(transf_expr s.sloc env Val e, - transf_stmt env s1, transf_stmt env s2); - sloc = s.sloc} - | Swhile(e, s1) -> - {sdesc = Swhile(transf_expr s.sloc env Val e, transf_stmt env s1); - sloc = s.sloc} - | Sdowhile(s1, e) -> - {sdesc = Sdowhile(transf_stmt env s1, transf_expr s.sloc env Val e); - sloc = s.sloc} - | Sfor(s1, e, s2, s3) -> - {sdesc = Sfor(transf_stmt env s1, transf_expr s.sloc env Val e, - transf_stmt env s2, transf_stmt env s3); - sloc = s.sloc} - | Sbreak -> s - | Scontinue -> s - | Sswitch(e, s1) -> - {sdesc = Sswitch(transf_expr s.sloc env Val e, - transf_stmt env s1); sloc = s.sloc} - | Slabeled(lbl, s) -> - {sdesc = Slabeled(lbl, transf_stmt env s); sloc = s.sloc} - | Sgoto lbl -> s - | Sreturn None -> s - | Sreturn (Some e) -> - {sdesc = Sreturn(Some(transf_expr s.sloc env Val e)); sloc = s.sloc} - | Sblock _ | Sdecl _ -> - assert false (* should not occur in unblocked code *) +let transf_stmt env s = + Transform.stmt transf_expr env s (* Functions *) let transf_fundef env f = - { f with fd_body = transf_stmt env f.fd_body } + Transform.fundef transf_stmt env f (* Initializers *) -- cgit v1.2.3