aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--driver/Compiler.v38
2 files changed, 24 insertions, 16 deletions
diff --git a/Makefile b/Makefile
index 8aa5e98a..ec5e2cd0 100644
--- a/Makefile
+++ b/Makefile
@@ -94,7 +94,7 @@ BACKEND=\
Unusedglob.v Unusedglobproof.v \
Machregs.v Locations.v Conventions1.v Conventions.v LTL.v \
ForwardMoves.v ForwardMovesproof.v \
- FirstNop.v \
+ FirstNop.v FirstNopproof.v \
Allnontrap.v Allnontrapproof.v \
Allocation.v Allocproof.v \
Tunneling.v Tunnelingproof.v \
diff --git a/driver/Compiler.v b/driver/Compiler.v
index 47fb8236..cc1e7917 100644
--- a/driver/Compiler.v
+++ b/driver/Compiler.v
@@ -37,6 +37,7 @@ Require Selection.
Require RTLgen.
Require Tailcall.
Require Inlining.
+Require FirstNop.
Require Renumber.
Require Duplicate.
Require Constprop.
@@ -63,6 +64,7 @@ Require Selectionproof.
Require RTLgenproof.
Require Tailcallproof.
Require Inliningproof.
+Require FirstNopproof.
Require Renumberproof.
Require Duplicateproof.
Require Constpropproof.
@@ -134,28 +136,30 @@ Definition transf_rtl_program (f: RTL.program) : res Asm.program :=
@@ print (print_RTL 1)
@@@ time "Inlining" Inlining.transf_program
@@ print (print_RTL 2)
- @@ time "Renumbering" Renumber.transf_program
+ @@ time "Inserting initial nop" FirstNop.transf_program
@@ print (print_RTL 3)
- @@@ time "Tail-duplicating" Duplicate.transf_program
+ @@ time "Renumbering" Renumber.transf_program
@@ print (print_RTL 4)
- @@ total_if Compopts.optim_constprop (time "Constant propagation" Constprop.transf_program)
+ @@@ time "Tail-duplicating" Duplicate.transf_program
@@ print (print_RTL 5)
- @@ total_if Compopts.optim_constprop (time "Renumbering" Renumber.transf_program)
+ @@ total_if Compopts.optim_constprop (time "Constant propagation" Constprop.transf_program)
@@ print (print_RTL 6)
- @@@ partial_if Compopts.optim_CSE (time "CSE" CSE.transf_program)
+ @@ total_if Compopts.optim_constprop (time "Renumbering" Renumber.transf_program)
@@ print (print_RTL 7)
- @@ total_if Compopts.optim_CSE2 (time "CSE2" CSE2.transf_program)
+ @@@ partial_if Compopts.optim_CSE (time "CSE" CSE.transf_program)
@@ print (print_RTL 8)
- @@@ partial_if Compopts.optim_CSE3 (time "CSE3" CSE3.transf_program)
+ @@ total_if Compopts.optim_CSE2 (time "CSE2" CSE2.transf_program)
@@ print (print_RTL 9)
- @@ total_if Compopts.optim_forward_moves ForwardMoves.transf_program
+ @@@ partial_if Compopts.optim_CSE3 (time "CSE3" CSE3.transf_program)
@@ print (print_RTL 10)
- @@@ partial_if Compopts.optim_redundancy (time "Redundancy elimination" Deadcode.transf_program)
+ @@ total_if Compopts.optim_forward_moves ForwardMoves.transf_program
@@ print (print_RTL 11)
- @@ total_if Compopts.all_loads_nontrap Allnontrap.transf_program
+ @@@ partial_if Compopts.optim_redundancy (time "Redundancy elimination" Deadcode.transf_program)
@@ print (print_RTL 12)
- @@@ time "Unused globals" Unusedglob.transform_program
+ @@ total_if Compopts.all_loads_nontrap Allnontrap.transf_program
@@ print (print_RTL 13)
+ @@@ time "Unused globals" Unusedglob.transform_program
+ @@ print (print_RTL 14)
@@@ time "Register allocation" Allocation.transf_program
@@ print print_LTL
@@ time "Branch tunneling" Tunneling.tunnel_program
@@ -257,6 +261,7 @@ Definition CompCert's_passes :=
::: mkpass RTLgenproof.match_prog
::: mkpass (match_if Compopts.optim_tailcalls Tailcallproof.match_prog)
::: mkpass Inliningproof.match_prog
+ ::: mkpass FirstNopproof.match_prog
::: mkpass Renumberproof.match_prog
::: mkpass Duplicateproof.match_prog
::: mkpass (match_if Compopts.optim_constprop Constpropproof.match_prog)
@@ -305,8 +310,9 @@ Proof.
unfold transf_rtl_program, time in T. rewrite ! compose_print_identity in T. simpl in T.
set (p7 := total_if optim_tailcalls Tailcall.transf_program p6) in *.
destruct (Inlining.transf_program p7) as [p8|e] eqn:P8; simpl in T; try discriminate.
- set (p9 := Renumber.transf_program p8) in *.
- destruct (Duplicate.transf_program p9) as [p10|e] eqn:P10; simpl in T; try discriminate.
+ set (p9 := FirstNop.transf_program p8) in *.
+ set (p9bis := Renumber.transf_program p9) in *.
+ destruct (Duplicate.transf_program p9bis) as [p10|e] eqn:P10; simpl in T; try discriminate.
set (p11 := total_if optim_constprop Constprop.transf_program p10) in *.
set (p12 := total_if optim_constprop Renumber.transf_program p11) in *.
destruct (partial_if optim_CSE CSE.transf_program p12) as [p13|e] eqn:P13; simpl in T; try discriminate.
@@ -331,7 +337,8 @@ Proof.
exists p6; split. apply RTLgenproof.transf_program_match; auto.
exists p7; split. apply total_if_match. apply Tailcallproof.transf_program_match.
exists p8; split. apply Inliningproof.transf_program_match; auto.
- exists p9; split. apply Renumberproof.transf_program_match; auto.
+ exists p9; split. apply FirstNopproof.transf_program_match; auto.
+ exists p9bis; split. apply Renumberproof.transf_program_match; auto.
exists p10; split. apply Duplicateproof.transf_program_match; auto.
exists p11; split. apply total_if_match. apply Constpropproof.transf_program_match.
exists p12; split. apply total_if_match. apply Renumberproof.transf_program_match.
@@ -399,7 +406,7 @@ Ltac DestructM :=
destruct H as (p & M & MM); clear H
end.
repeat DestructM. subst tp.
- assert (F: forward_simulation (Cstrategy.semantics p) (Asm.semantics p26)).
+ assert (F: forward_simulation (Cstrategy.semantics p) (Asm.semantics p27)).
{
eapply compose_forward_simulations.
eapply SimplExprproof.transl_program_correct; eassumption.
@@ -417,6 +424,7 @@ Ltac DestructM :=
eapply match_if_simulation. eassumption. exact Tailcallproof.transf_program_correct.
eapply compose_forward_simulations.
eapply Inliningproof.transf_program_correct; eassumption.
+ eapply compose_forward_simulations. eapply FirstNopproof.transf_program_correct; eassumption.
eapply compose_forward_simulations. eapply Renumberproof.transf_program_correct; eassumption.
eapply compose_forward_simulations.
eapply Duplicateproof.transf_program_correct; eassumption.