From compcert Require Import lib.Coqlib.
From compcert Require Import common.Errors.
From compcert Require Import common.AST.
From compcert Require Import common.Linking.
From compcert Require Import common.Smallstep.
From compcert Require Import common.Behaviors.
From compcert Require cfrontend.Clight.
From compcert Require Import driver.Compopts.
From compcert Require Import driver.Complements.
From compcert Require Import driver.Compiler.
From compcert Require Asm.
Compilation from Clight to Asm
Definition transf_clight2_program (
p:
Clight.program) :
res Asm.program :=
OK p
@@@
time "
C#
minor generation"
Cshmgen.transl_program
@@@
time "
Cminor generation"
Cminorgen.transl_program
@@@
transf_cminor_program.
Local Open Scope linking_scope.
Definition clight2_to_asm_passes :=
mkpass Cshmgenproof.match_prog
:::
mkpass Cminorgenproof.match_prog
:::
mkpass Selectionproof.match_prog
:::
mkpass RTLgenproof.match_prog
:::
mkpass (
match_if Compopts.optim_tailcalls Tailcallproof.match_prog)
:::
mkpass Inliningproof.match_prog
:::
mkpass Renumberproof.match_prog
:::
mkpass (
match_if Compopts.optim_constprop Constpropproof.match_prog)
:::
mkpass (
match_if Compopts.optim_constprop Renumberproof.match_prog)
:::
mkpass (
match_if Compopts.optim_CSE CSEproof.match_prog)
:::
mkpass (
match_if Compopts.optim_redundancy Deadcodeproof.match_prog)
:::
mkpass Unusedglobproof.match_prog
:::
mkpass Allocproof.match_prog
:::
mkpass Tunnelingproof.match_prog
:::
mkpass Linearizeproof.match_prog
:::
mkpass CleanupLabelsproof.match_prog
:::
mkpass (
match_if Compopts.debug Debugvarproof.match_prog)
:::
mkpass Stackingproof.match_prog
:::
mkpass Asmgenproof.match_prog
:::
pass_nil _.
Composing the match_prog relations above, we obtain the relation
between Clight sources and Asm code that characterize CompCert's
compilation.
Definition match_prog:
Clight.program ->
Asm.program ->
Prop :=
pass_match (
compose_passes clight2_to_asm_passes).
The transf_clight2_program function, when successful, produces
assembly code that is in the match_prog relation with the source C program.
Theorem transf_clight_program_match:
forall p tp,
transf_clight2_program p =
OK tp ->
match_prog p tp.
Proof.
Missing result from Clight.v: receptiveness of the Clight2 semantics
Lemma clight2_semantics_receptive:
forall (
p:
Clight.program),
receptive (
Clight.semantics2 p).
Proof.
Semantic preservation (forward and backward simulation) between Clight and Asm
Theorem clight2_semantic_preservation:
forall p tp,
match_prog p tp ->
forward_simulation (
Clight.semantics2 p) (
Asm.semantics tp) /\
backward_simulation (
Clight.semantics2 p) (
Asm.semantics tp).
Proof.
The corollary for Tim and Lelio
Theorem diverges_trace_preservation:
forall p tp,
transf_clight2_program p =
OK tp ->
forall t,
program_behaves (
Clight.semantics2 p) (
Diverges t) ->
program_behaves (
Asm.semantics tp) (
Diverges t).
Proof.
Theorem reacts_trace_preservation:
forall p tp,
transf_clight2_program p =
OK tp ->
forall T,
program_behaves (
Clight.semantics2 p) (
Reacts T) ->
program_behaves (
Asm.semantics tp) (
Reacts T).
Proof.