Gible Seq Generation Proof
Defining a find block specification
Basically, it should be able to find the location of the block without using the
find_block
function, so that this is more useful for the proofs. There are
various different types of options that could come up though:
The instruction is a standard instruction present inside of a basic block.
The instruction is a standard instruction which ends with a
goto
.The instruction is a control-flow instruction.
For case number 1, there should exist a value in the list of instructions, such that the instructions match exactly, and the indices match as well. In the original code, this instruction must have been going from the current node to the node - 1.
For case number 2, there should be an instruction at the right index again,
however, this time there will also be a goto
instruction in the control-flow
part of the basic block.
For case number 3, there should be a nop
instruction in the basic block, and
then the equivalent control-flow instruction ending the basic block.
In the end though, it seems like two cases are actually enough, as the last two cases are similar enough that they can be merged into one.
Definition all_max {A} (c: PTree.t A) p: Prop := Forall (fun x => x <= p) (map fst (PTree.elements c)). Definition offset (pc pc': positive): nat := Pos.to_nat pc' - Pos.to_nat pc. Section CORRECTNESS. Context (prog : RTL.program). Context (tprog : GibleSeq.program). Let ge : RTL.genv := Globalenvs.Genv.globalenv prog. Let tge : genv := Globalenvs.Genv.globalenv tprog.
Matches the basic block that should be present in the state. This simulates the small step execution of the basic block from the big step semantics that are currently present.
Why does it not need to find the pc’ value using find_block
?
It doesn’t have to find the value because it’s given as an input, and the finding is actually done at that higher level already.
(* Variant match_bblock (tc: code) (pc pc': node): list instr -> Prop := | match_bblock_intro : forall bb cf, tc ! pc' = Some (mk_bblock bb cf) -> match_bblock tc pc pc' (list_drop (offset pc pc') bb).*) Definition imm_succ (pc pc': node) : Prop := pc' = Pos.pred pc. Definition valid_succ (tc: code) (pc: node) : Prop := exists b, tc ! pc = Some b. Inductive match_block (c: RTL.code) (tc: code) (pc: node): SeqBB.t -> Prop := (* * Basic Block Instructions *) | match_block_nop b pc': c ! pc = Some (RTL.Inop pc') -> match_block c tc pc' b -> match_block c tc pc (RBnop :: b) | match_block_op b op args dst pc': c ! pc = Some (RTL.Iop op args dst pc') -> match_block c tc pc' b -> match_block c tc pc (RBop None op args dst :: b) | match_block_load b chunk addr args dst pc': c ! pc = Some (RTL.Iload chunk addr args dst pc') -> match_block c tc pc' b -> match_block c tc pc (RBload None chunk addr args dst :: b) | match_block_store b chunk addr args src pc': c ! pc = Some (RTL.Istore chunk addr args src pc') -> match_block c tc pc' b -> match_block c tc pc (RBstore None chunk addr args src :: b) (* * Control flow instructions using goto *) | match_block_goto pc': c ! pc = Some (RTL.Inop pc') -> valid_succ tc pc' -> match_block c tc pc (RBnop :: RBexit None (RBgoto pc') :: nil) | match_block_op_cf pc' op args dst: c ! pc = Some (RTL.Iop op args dst pc') -> valid_succ tc pc' -> match_block c tc pc (RBop None op args dst :: RBexit None (RBgoto pc') :: nil) | match_block_load_cf pc' chunk addr args dst: c ! pc = Some (RTL.Iload chunk addr args dst pc') -> valid_succ tc pc' -> match_block c tc pc (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil) | match_block_store_cf pc' chunk addr args src: c ! pc = Some (RTL.Istore chunk addr args src pc') -> valid_succ tc pc' -> match_block c tc pc (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil) (* * Standard control flow instructions *) | match_block_call sig ident args dst pc' : c ! pc = Some (RTL.Icall sig ident args dst pc') -> valid_succ tc pc' -> match_block c tc pc (RBnop :: RBexit None (RBcall sig ident args dst pc') :: nil) | match_block_tailcall sig ident args : c ! pc = Some (RTL.Itailcall sig ident args) -> match_block c tc pc (RBnop :: RBexit None (RBtailcall sig ident args) :: nil) | match_block_builtin ident args dst pc' : c ! pc = Some (RTL.Ibuiltin ident args dst pc') -> valid_succ tc pc' -> match_block c tc pc (RBnop :: RBexit None (RBbuiltin ident args dst pc') :: nil) | match_block_cond cond args pct pcf : c ! pc = Some (RTL.Icond cond args pct pcf) -> valid_succ tc pct -> valid_succ tc pcf -> match_block c tc pc (RBnop :: RBexit None (RBcond cond args pct pcf) :: nil) | match_block_jumptable r ns : c ! pc = Some (RTL.Ijumptable r ns) -> Forall (valid_succ tc) ns -> match_block c tc pc (RBnop :: RBexit None (RBjumptable r ns) :: nil) | match_block_return r : c ! pc = Some (RTL.Ireturn r) -> match_block c tc pc (RBnop :: RBexit None (RBreturn r) :: nil) .
Match the code
The match_code
predicate asserts that for any node in the original
control-flow graph, there is now a basic block in the new control- and data-flow
graph that contains the same instruction, but also that the whole basic block
matches some sequence of instructions starting at the node that corresponds to
the basic block.
Definition match_code (c: RTL.code) (tc: code) : Prop := forall pc b, tc ! pc = Some b -> match_block c tc pc b. Variant match_stackframe : RTL.stackframe -> stackframe -> Prop := | match_stackframe_init : forall res f tf sp pc rs (TF: transl_function f = OK tf) (VALID: valid_succ tf.(fn_code) pc), match_stackframe (RTL.Stackframe res f sp pc rs) (Stackframe res tf sp pc rs (PMap.init false)). Definition sem_extrap f pc sp in_s in_s' block := forall out_s block2, SeqBB.step tge sp in_s block out_s -> f.(fn_code) ! pc = Some block2 -> SeqBB.step tge sp in_s' block2 out_s.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genvforall (c : RTL.code) (tc : code) (pc : node) (a : SeqBB.t), match_block c tc pc a -> exists i : RTL.instruction, c ! pc = Some iinversion 1; eexists; eauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genvforall (c : RTL.code) (tc : code) (pc : node) (a : SeqBB.t), match_block c tc pc a -> exists i : RTL.instruction, c ! pc = Some iprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genvforall (c : RTL.code) (tc : code) (pc : node) (a : SeqBB.t), match_block c tc pc a -> a <> nilinversion 1; crush. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genvforall (c : RTL.code) (tc : code) (pc : node) (a : SeqBB.t), match_block c tc pc a -> a <> nil
Matching states
Initially, the idea was to define the match_states
predicate normally to
defines how to find the correct bb
that should be executed, as well as the
value of pc
. However, this does not quite work when proving the equivalence
of the translation from RTL
to RTLBlock
, because one cannot match one
transition to a transition in RTLBlock. The alternative to this is to include a
proof inside of the match_states
that shows that the execution from the
pc
of the start of the basic block to the current point is the same as the
whole execution (in one big step) of the basic block.
Variant match_states : option SeqBB.t -> RTL.state -> state -> Prop := | match_state : forall stk stk' f tf sp pc rs m pc0 b rs0 m0 (TF: transl_function f = OK tf) (* TODO: I can remove the following [match_code]. *) (CODE: match_code f.(RTL.fn_code) tf.(fn_code)) (BLOCK: exists b', tf.(fn_code) ! pc0 = Some b' /\ match_block f.(RTL.fn_code) tf.(fn_code) pc b) (STK: Forall2 match_stackframe stk stk') (STARSIMU: star RTL.step ge (RTL.State stk f sp pc0 rs0 m0) E0 (RTL.State stk f sp pc rs m)) (BB: sem_extrap tf pc0 sp (Iexec (mk_instr_state rs (PMap.init false) m)) (Iexec (mk_instr_state rs0 (PMap.init false) m0)) b), match_states (Some b) (RTL.State stk f sp pc rs m) (State stk' tf sp pc0 rs0 (PMap.init false) m0) | match_callstate : forall cs cs' f tf args m (TF: transl_fundef f = OK tf) (STK: Forall2 match_stackframe cs cs'), match_states None (RTL.Callstate cs f args m) (Callstate cs' tf args m) | match_returnstate : forall cs cs' v m (STK: Forall2 match_stackframe cs cs'), match_states None (RTL.Returnstate cs v m) (Returnstate cs' v m) . Definition match_prog (p: RTL.program) (tp: GibleSeq.program) := Linking.match_program (fun cu f tf => transl_fundef f = Errors.OK tf) eq p tp.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genvforall (p : RTL.program) (tp : program), transl_program p = OK tp -> match_prog p tpprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genvforall (p : RTL.program) (tp : program), transl_program p = OK tp -> match_prog p tpprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
p: RTL.program
tp: program
H: transl_program p = OK tpmatch_prog p tpeapply Linking.match_transform_partial_program; auto. Qed. Context (TRANSL : match_prog prog tprog).prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
p: RTL.program
tp: program
H: transl_program p = OK tpLinking.match_program (fun (_ : AST.program (AST.fundef RTL.function) unit) (f : AST.fundef RTL.function) (tf : AST.fundef function) => transl_fundef f = OK tf) eq p tpprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall s : ident, Genv.find_symbol tge s = Genv.find_symbol ge sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall s : ident, Genv.find_symbol tge s = Genv.find_symbol ge seapply (Genv.find_symbol_match TRANSL). Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: identGenv.find_symbol tge s = Genv.find_symbol ge sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogSenv.equiv ge tgeintros; eapply (Genv.senv_transf_partial TRANSL). Qed. #[local] Hint Resolve senv_preserved : rtlbg.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogSenv.equiv ge tgeProof (Genv.find_funct_ptr_transf_partial TRANSL).prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (b : block) (f : RTL.fundef), Genv.find_funct_ptr ge b = Some f -> exists tf : fundef, Genv.find_funct_ptr tge b = Some tf /\ transl_fundef f = OK tfprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (f : RTL.fundef) (tf : fundef), transl_fundef f = OK tf -> funsig tf = RTL.funsig fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (f : RTL.fundef) (tf : fundef), transl_fundef f = OK tf -> funsig tf = RTL.funsig fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (f : RTL.fundef) (tf : fundef), transf_partial_fundef transl_function f = OK tf -> funsig tf = RTL.funsig fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (f : RTL.fundef) (tf : fundef), match f with | Internal f0 => bind (transl_function f0) (fun f' : function => OK (Internal f')) | External ef => OK (External ef) end = OK tf -> funsig tf = RTL.funsig fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
H: match f with | Internal f => bind (transl_function f) (fun f' : function => OK (Internal f')) | External ef => OK (External ef) end = OK tffunsig tf = RTL.funsig fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
f0: RTL.function
Heqf0: f = Internal f0
H: bind (transl_function f0) (fun f' : function => OK (Internal f')) = OK tffunsig tf = RTL.funsig (Internal f0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
e: external_function
Heqf0: f = External e
H: OK (External e) = OK tffunsig tf = RTL.funsig (External e)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
f0: RTL.function
Heqf0: f = Internal f0
H: match transl_function f0 with | OK x => OK (Internal x) | Error msg => Error msg end = OK tffunsig tf = RTL.funsig (Internal f0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
e: external_function
Heqf0: f = External e
H: OK (External e) = OK tffunsig tf = RTL.funsig (External e)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
f0: RTL.function
Heqf0: f = Internal f0
f1: function
Heqr: transl_function f0 = OK f1
H: OK (Internal f1) = OK tffunsig tf = RTL.funsig (Internal f0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
e: external_function
Heqf0: f = External e
H: OK (External e) = OK tffunsig tf = RTL.funsig (External e)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f0: RTL.function
f1: function
Heqr: transl_function f0 = OK f1funsig (Internal f1) = RTL.funsig (Internal f0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
e: external_function
Heqf0: f = External e
H: OK (External e) = OK tffunsig tf = RTL.funsig (External e)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f0: RTL.function
f1: function
Heqr: match partition f0 with | OK f' => if check_valid_node (fn_code f') (RTL.fn_entrypoint f0) then if forall_ptree (check_code (RTL.fn_code f0) (fn_code f')) (fn_code f') then OK {| fn_sig := RTL.fn_sig f0; fn_params := RTL.fn_params f0; fn_stacksize := RTL.fn_stacksize f0; fn_code := fn_code f'; fn_entrypoint := RTL.fn_entrypoint f0 |} else Error (msg "check_present_blocks failed") else Error (msg "entrypoint does not exists") | Error msg => Error msg end = OK f1funsig (Internal f1) = RTL.funsig (Internal f0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
e: external_function
Heqf0: f = External e
H: OK (External e) = OK tffunsig tf = RTL.funsig (External e)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f0: RTL.function
f1, f: function
Heqr0: partition f0 = OK f
Heqb: check_valid_node (fn_code f) (RTL.fn_entrypoint f0) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f0) (fn_code f)) (fn_code f) = true
Heqr: OK {| fn_sig := RTL.fn_sig f0; fn_params := RTL.fn_params f0; fn_stacksize := RTL.fn_stacksize f0; fn_code := fn_code f; fn_entrypoint := RTL.fn_entrypoint f0 |} = OK f1funsig (Internal f1) = RTL.funsig (Internal f0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
e: external_function
Heqf0: f = External e
H: OK (External e) = OK tffunsig tf = RTL.funsig (External e)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f0: RTL.function
f: function
Heqr0: partition f0 = OK f
Heqb: check_valid_node (fn_code f) (RTL.fn_entrypoint f0) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f0) (fn_code f)) (fn_code f) = truefunsig (Internal {| fn_sig := RTL.fn_sig f0; fn_params := RTL.fn_params f0; fn_stacksize := RTL.fn_stacksize f0; fn_code := fn_code f; fn_entrypoint := RTL.fn_entrypoint f0 |}) = RTL.funsig (Internal f0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
e: external_function
Heqf0: f = External e
H: OK (External e) = OK tffunsig tf = RTL.funsig (External e)inv H; auto. Qed. Definition measure (b: option SeqBB.t): nat := match b with | None => 0 | Some b' => 1 + length b' end.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.fundef
tf: fundef
e: external_function
Heqf0: f = External e
H: OK (External e) = OK tffunsig tf = RTL.funsig (External e)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (a : code) (b : node), check_valid_node a b = true -> valid_succ a bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (a : code) (b : node), check_valid_node a b = true -> valid_succ a bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
a: code
b: node
H: check_valid_node a b = truevalid_succ a bdestruct_match; try discriminate; eauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
a: code
b: node
H: match a ! b with | Some _ => true | None => false end = trueexists b0 : SeqBB.t, a ! b = Some b0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (f : RTL.function) (tf : function), transl_function f = OK tf -> valid_succ (fn_code tf) (fn_entrypoint tf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (f : RTL.function) (tf : function), transl_function f = OK tf -> valid_succ (fn_code tf) (fn_entrypoint tf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
tf: function
H: match partition f with | OK f' => if check_valid_node (fn_code f') (RTL.fn_entrypoint f) then if forall_ptree (check_code (RTL.fn_code f) (fn_code f')) (fn_code f') then OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f'; fn_entrypoint := RTL.fn_entrypoint f |} else Error (msg "check_present_blocks failed") else Error (msg "entrypoint does not exists") | Error msg => Error msg end = OK tfvalid_succ (fn_code tf) (fn_entrypoint tf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
tf, f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = true
H: OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |} = OK tfvalid_succ (fn_code tf) (fn_entrypoint tf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = truevalid_succ (fn_code {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |}) (fn_entrypoint {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |})eauto using check_valid_node_correct. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = truevalid_succ (fn_code f0) (RTL.fn_entrypoint f)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (A : Type) (a : forall a b : A, {a = b} + {a <> b}) (b c : A), ceq a b c = true -> b = cprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (A : Type) (a : forall a b : A, {a = b} + {a <> b}) (b c : A), ceq a b c = true -> b = cprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
A: Type
a: forall a b : A, {a = b} + {a <> b}
b, c: A
H: ceq a b c = trueb = cprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
A: Type
a: forall a b : A, {a = b} + {a <> b}
b, c: A
H: (if a b c then true else false) = trueb = cauto. Qed. Ltac unfold_ands := repeat match goal with | H: _ && _ = true |- _ => apply andb_prop in H | H: _ /\ _ |- _ => inv H | H: ceq _ _ _ = true |- _ => apply ceq_eq in H; subst end.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
A: Type
a: forall a b : A, {a = b} + {a <> b}
b, c: A
e: b = c
Heqs: a b c = left e
H: true = trueb = cprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (c : RTL.code) (tc : code) (b : SeqBB.t) (pc : node), check_code c tc pc b = true -> match_block c tc pc bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (c : RTL.code) (tc : code) (b : SeqBB.t) (pc : node), check_code c tc pc b = true -> match_block c tc pc bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
pc: node
H: match c ! pc with | Some (RTL.Inop _) | _ => false end = truematch_block c tc pc nilprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc bforall pc : node, check_code c tc pc (a :: b) = true -> match_block c tc pc (a :: b)repeat (destruct_match; try discriminate).prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
pc: node
H: match c ! pc with | Some (RTL.Inop _) | _ => false end = truematch_block c tc pc nilprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc bforall pc : node, check_code c tc pc (a :: b) = true -> match_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
H: check_code c tc pc (a :: b) = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
H: match c ! pc with | Some (RTL.Inop pc'') => match a with | RBnop => match b with | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ => (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args' dst' pc''0) => match b with | RBop None op args dst :: nil | RBop None op args dst :: RBnop :: nil | RBop None op args dst :: RBop _ _ _ _ :: nil | RBop None op args dst :: RBload _ _ _ _ _ :: nil | RBop None op args dst :: RBstore _ _ _ _ _ :: nil | RBop None op args dst :: RBsetpred _ _ _ _ :: nil | RBop None op args dst :: RBexit (Some _) _ :: nil | RBop None op args dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBjumptable _ _) :: nil | RBop None op args dst :: RBexit None (RBreturn _) :: nil => false | RBop None op args dst :: (RBnop :: _ :: _) as b' | RBop None op args dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | RBop None op args dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' | RBop None op args dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk' addr' args' dst' pc''0) => match b with | RBload None chunk addr args dst :: nil | RBload None chunk addr args dst :: RBnop :: nil | RBload None chunk addr args dst :: RBop _ _ _ _ :: nil | RBload None chunk addr args dst :: RBload _ _ _ _ _ :: nil | RBload None chunk addr args dst :: RBstore _ _ _ _ _ :: nil | RBload None chunk addr args dst :: RBsetpred _ _ _ _ :: nil | RBload None chunk addr args dst :: RBexit (Some _) _ :: nil | RBload None chunk addr args dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBreturn _) :: nil => false | RBload None chunk addr args dst :: (RBnop :: _ :: _) as b' | RBload None chunk addr args dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' | RBload None chunk addr args dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk' addr' args' src' pc''0) => match b with | RBstore None chunk addr args src :: nil | RBstore None chunk addr args src :: RBnop :: nil | RBstore None chunk addr args src :: RBop _ _ _ _ :: nil | RBstore None chunk addr args src :: RBload _ _ _ _ _ :: nil | RBstore None chunk addr args src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk addr args src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk addr args src :: RBexit (Some _) _ :: nil | RBstore None chunk addr args src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk addr args src :: (RBnop :: _ :: _) as b' | RBstore None chunk addr args src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' | RBstore None chunk addr args src :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args' dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r0) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args args' && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inl r0) args dst pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args' dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args args' && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inr i) args dst pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r0) args) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args') :: nil => ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args args' | RBnop :: RBexit None (RBtailcall sig' (inl r') args') :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r0) args) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args') :: nil => ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args args' | RBnop :: RBexit None (RBtailcall sig' (inr r') args') :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args' n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args args' && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args' n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r0 ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r0 r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r0)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r0 r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | RBnop :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args' dst' pc''0) => match b with | RBop None op args dst :: nil | RBop None op args dst :: RBnop :: nil | RBop None op args dst :: RBop _ _ _ _ :: nil | RBop None op args dst :: RBload _ _ _ _ _ :: nil | RBop None op args dst :: RBstore _ _ _ _ _ :: nil | RBop None op args dst :: RBsetpred _ _ _ _ :: nil | RBop None op args dst :: RBexit (Some _) _ :: nil | RBop None op args dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBjumptable _ _) :: nil | RBop None op args dst :: RBexit None (RBreturn _) :: nil => false | RBop None op args dst :: (RBnop :: _ :: _) as b' | RBop None op args dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | RBop None op args dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' | RBop None op args dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk' addr' args' dst' pc''0) => match b with | RBload None chunk addr args dst :: nil | RBload None chunk addr args dst :: RBnop :: nil | RBload None chunk addr args dst :: RBop _ _ _ _ :: nil | RBload None chunk addr args dst :: RBload _ _ _ _ _ :: nil | RBload None chunk addr args dst :: RBstore _ _ _ _ _ :: nil | RBload None chunk addr args dst :: RBsetpred _ _ _ _ :: nil | RBload None chunk addr args dst :: RBexit (Some _) _ :: nil | RBload None chunk addr args dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBreturn _) :: nil => false | RBload None chunk addr args dst :: (RBnop :: _ :: _) as b' | RBload None chunk addr args dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' | RBload None chunk addr args dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk' addr' args' src' pc''0) => match b with | RBstore None chunk addr args src :: nil | RBstore None chunk addr args src :: RBnop :: nil | RBstore None chunk addr args src :: RBop _ _ _ _ :: nil | RBstore None chunk addr args src :: RBload _ _ _ _ _ :: nil | RBstore None chunk addr args src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk addr args src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk addr args src :: RBexit (Some _) _ :: nil | RBstore None chunk addr args src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk addr args src :: (RBnop :: _ :: _) as b' | RBstore None chunk addr args src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' | RBstore None chunk addr args src :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args' dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inl r) args dst pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args' dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args args' && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inr i) args dst pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args') :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' | RBnop :: RBexit None (RBtailcall sig' (inl r') args') :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args') :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' | RBnop :: RBexit None (RBtailcall sig' (inr r') args') :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args' n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args args' && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args' n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' | RBexit None (RBgoto pc') :: _ :: _ => (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 | RBnop :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args' dst' pc''0) => match b with | RBop None op args dst :: nil | RBop None op args dst :: RBnop :: nil | RBop None op args dst :: RBop _ _ _ _ :: nil | RBop None op args dst :: RBload _ _ _ _ _ :: nil | RBop None op args dst :: RBstore _ _ _ _ _ :: nil | RBop None op args dst :: RBsetpred _ _ _ _ :: nil | RBop None op args dst :: RBexit (Some _) _ :: nil | RBop None op args dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBjumptable _ _) :: nil | RBop None op args dst :: RBexit None (RBreturn _) :: nil => false | RBop None op args dst :: (RBnop :: _ :: _) as b' | RBop None op args dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | RBop None op args dst :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' | RBop None op args dst :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk' addr' args' dst' pc''0) => match b with | RBload None chunk addr args dst :: nil | RBload None chunk addr args dst :: RBnop :: nil | RBload None chunk addr args dst :: RBop _ _ _ _ :: nil | RBload None chunk addr args dst :: RBload _ _ _ _ _ :: nil | RBload None chunk addr args dst :: RBstore _ _ _ _ _ :: nil | RBload None chunk addr args dst :: RBsetpred _ _ _ _ :: nil | RBload None chunk addr args dst :: RBexit (Some _) _ :: nil | RBload None chunk addr args dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBreturn _) :: nil => false | RBload None chunk addr args dst :: (RBnop :: _ :: _) as b' | RBload None chunk addr args dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | RBload None chunk addr args dst :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' | RBload None chunk addr args dst :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk' addr' args' src' pc''0) => match b with | RBstore None chunk addr args src :: nil | RBstore None chunk addr args src :: RBnop :: nil | RBstore None chunk addr args src :: RBop _ _ _ _ :: nil | RBstore None chunk addr args src :: RBload _ _ _ _ _ :: nil | RBstore None chunk addr args src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk addr args src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk addr args src :: RBexit (Some _) _ :: nil | RBstore None chunk addr args src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk addr args src :: (RBnop :: _ :: _) as b' | RBstore None chunk addr args src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk addr args src :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' | RBstore None chunk addr args src :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args' dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r) args dst pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inl r) args dst pc'0) :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args' dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args dst pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args args' && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inr i) args dst pc'0) :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args') :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' | RBnop :: RBexit None (RBtailcall sig' (inl r') args') :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args') :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' | RBnop :: RBexit None (RBtailcall sig' (inr r') args') :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args' n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args args' && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args' n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | _ => false end | _ => false end | Some (RTL.Iop op' args' dst' pc'') => match a with | RBop None op args dst => match b with | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op'0 args'0 dst'0 pc''0) => match b with | RBop None op0 args0 dst0 :: nil | RBop None op0 args0 dst0 :: RBnop :: nil | RBop None op0 args0 dst0 :: RBop _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBload _ _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBexit (Some _) _ :: nil | RBop None op0 args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBop None op0 args0 dst0 :: (RBnop :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBop None op0 args0 dst0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBop None op0 args0 dst0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk' addr' args'0 dst'0 pc''0) => match b with | RBload None chunk addr args0 dst0 :: nil | RBload None chunk addr args0 dst0 :: RBnop :: nil | RBload None chunk addr args0 dst0 :: RBop _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBload _ _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBexit (Some _) _ :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBload None chunk addr args0 dst0 :: (RBnop :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBload None chunk addr args0 dst0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBload None chunk addr args0 dst0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk' addr' args'0 src' pc''0) => match b with | RBstore None chunk addr args0 src :: nil | RBstore None chunk addr args0 src :: RBnop :: nil | RBstore None chunk addr args0 src :: RBop _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBload _ _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBexit (Some _) _ :: nil | RBstore None chunk addr args0 src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk addr args0 src :: (RBnop :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk addr args0 src :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' | RBstore None chunk addr args0 src :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r0) args0 dst0 pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inl r0) args0 dst0 pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r0) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r0) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r0 ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r0 r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r0)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r0 r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | RBnop :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op'0 args'0 dst'0 pc''0) => match b with | RBop None op0 args0 dst0 :: nil | RBop None op0 args0 dst0 :: RBnop :: nil | RBop None op0 args0 dst0 :: RBop _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBload _ _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBexit (Some _) _ :: nil | RBop None op0 args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBop None op0 args0 dst0 :: (RBnop :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBop None op0 args0 dst0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBop None op0 args0 dst0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk' addr' args'0 dst'0 pc''0) => match b with | RBload None chunk addr args0 dst0 :: nil | RBload None chunk addr args0 dst0 :: RBnop :: nil | RBload None chunk addr args0 dst0 :: RBop _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBload _ _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBexit (Some _) _ :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBload None chunk addr args0 dst0 :: (RBnop :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBload None chunk addr args0 dst0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBload None chunk addr args0 dst0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk' addr' args'0 src' pc''0) => match b with | RBstore None chunk addr args0 src :: nil | RBstore None chunk addr args0 src :: RBnop :: nil | RBstore None chunk addr args0 src :: RBop _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBload _ _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBexit (Some _) _ :: nil | RBstore None chunk addr args0 src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk addr args0 src :: (RBnop :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk addr args0 src :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' | RBstore None chunk addr args0 src :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r) args0 dst0 pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inl r) args0 dst0 pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' | RBexit None (RBgoto pc') :: _ :: _ => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 | RBnop :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op'0 args'0 dst'0 pc''0) => match b with | RBop None op0 args0 dst0 :: nil | RBop None op0 args0 dst0 :: RBnop :: nil | RBop None op0 args0 dst0 :: RBop _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBload _ _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBop None op0 args0 dst0 :: RBexit (Some _) _ :: nil | RBop None op0 args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBop None op0 args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBop None op0 args0 dst0 :: (RBnop :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op0 args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBop None op0 args0 dst0 :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBop None op0 args0 dst0 :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq operation_eq op0 op'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk' addr' args'0 dst'0 pc''0) => match b with | RBload None chunk addr args0 dst0 :: nil | RBload None chunk addr args0 dst0 :: RBnop :: nil | RBload None chunk addr args0 dst0 :: RBop _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBload _ _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBload None chunk addr args0 dst0 :: RBexit (Some _) _ :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk addr args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBload None chunk addr args0 dst0 :: (RBnop :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk addr args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBload None chunk addr args0 dst0 :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBload None chunk addr args0 dst0 :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk' addr' args'0 src' pc''0) => match b with | RBstore None chunk addr args0 src :: nil | RBstore None chunk addr args0 src :: RBnop :: nil | RBstore None chunk addr args0 src :: RBop _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBload _ _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk addr args0 src :: RBexit (Some _) _ :: nil | RBstore None chunk addr args0 src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk addr args0 src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk addr args0 src :: (RBnop :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk addr args0 src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk addr args0 src :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' | RBstore None chunk addr args0 src :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r) args0 dst0 pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inl r) args0 dst0 pc'0) :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc'0) :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | _ => false end | _ => false end | Some (RTL.Iload chunk' addr' args' dst' pc'') => match a with | RBload None chunk addr args dst => match b with | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args'0 dst'0 pc''0) => match b with | RBop None op args0 dst0 :: nil | RBop None op args0 dst0 :: RBnop :: nil | RBop None op args0 dst0 :: RBop _ _ _ _ :: nil | RBop None op args0 dst0 :: RBload _ _ _ _ _ :: nil | RBop None op args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBop None op args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBop None op args0 dst0 :: RBexit (Some _) _ :: nil | RBop None op args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBop None op args0 dst0 :: (RBnop :: _ :: _) as b' | RBop None op args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBop None op args0 dst0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBop None op args0 dst0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk'0 addr'0 args'0 dst'0 pc''0) => match b with | RBload None chunk0 addr0 args0 dst0 :: nil | RBload None chunk0 addr0 args0 dst0 :: RBnop :: nil | RBload None chunk0 addr0 args0 dst0 :: RBop _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBload _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit (Some _) _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBload None chunk0 addr0 args0 dst0 :: (RBnop :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk'0 addr'0 args'0 src' pc''0) => match b with | RBstore None chunk0 addr0 args0 src :: nil | RBstore None chunk0 addr0 args0 src :: RBnop :: nil | RBstore None chunk0 addr0 args0 src :: RBop _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBload _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBexit (Some _) _ :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk0 addr0 args0 src :: (RBnop :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk0 addr0 args0 src :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r0) args0 dst0 pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inl r0) args0 dst0 pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r0) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r0) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r0 ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r0 r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r0)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r0 r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | RBnop :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args'0 dst'0 pc''0) => match b with | RBop None op args0 dst0 :: nil | RBop None op args0 dst0 :: RBnop :: nil | RBop None op args0 dst0 :: RBop _ _ _ _ :: nil | RBop None op args0 dst0 :: RBload _ _ _ _ _ :: nil | RBop None op args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBop None op args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBop None op args0 dst0 :: RBexit (Some _) _ :: nil | RBop None op args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBop None op args0 dst0 :: (RBnop :: _ :: _) as b' | RBop None op args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBop None op args0 dst0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBop None op args0 dst0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk'0 addr'0 args'0 dst'0 pc''0) => match b with | RBload None chunk0 addr0 args0 dst0 :: nil | RBload None chunk0 addr0 args0 dst0 :: RBnop :: nil | RBload None chunk0 addr0 args0 dst0 :: RBop _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBload _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit (Some _) _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBload None chunk0 addr0 args0 dst0 :: (RBnop :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk'0 addr'0 args'0 src' pc''0) => match b with | RBstore None chunk0 addr0 args0 src :: nil | RBstore None chunk0 addr0 args0 src :: RBnop :: nil | RBstore None chunk0 addr0 args0 src :: RBop _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBload _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBexit (Some _) _ :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk0 addr0 args0 src :: (RBnop :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk0 addr0 args0 src :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r) args0 dst0 pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inl r) args0 dst0 pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' | RBexit None (RBgoto pc') :: _ :: _ => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 | RBnop :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args'0 dst'0 pc''0) => match b with | RBop None op args0 dst0 :: nil | RBop None op args0 dst0 :: RBnop :: nil | RBop None op args0 dst0 :: RBop _ _ _ _ :: nil | RBop None op args0 dst0 :: RBload _ _ _ _ _ :: nil | RBop None op args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBop None op args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBop None op args0 dst0 :: RBexit (Some _) _ :: nil | RBop None op args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBop None op args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBop None op args0 dst0 :: (RBnop :: _ :: _) as b' | RBop None op args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBop None op args0 dst0 :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBop None op args0 dst0 :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk'0 addr'0 args'0 dst'0 pc''0) => match b with | RBload None chunk0 addr0 args0 dst0 :: nil | RBload None chunk0 addr0 args0 dst0 :: RBnop :: nil | RBload None chunk0 addr0 args0 dst0 :: RBop _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBload _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBstore _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBsetpred _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit (Some _) _ :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBreturn _) :: nil => false | RBload None chunk0 addr0 args0 dst0 :: (RBnop :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | RBload None chunk0 addr0 args0 dst0 :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBload None chunk0 addr0 args0 dst0 :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk'0 addr'0 args'0 src' pc''0) => match b with | RBstore None chunk0 addr0 args0 src :: nil | RBstore None chunk0 addr0 args0 src :: RBnop :: nil | RBstore None chunk0 addr0 args0 src :: RBop _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBload _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src :: RBexit (Some _) _ :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk0 addr0 args0 src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk0 addr0 args0 src :: (RBnop :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | RBstore None chunk0 addr0 args0 src :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' | RBstore None chunk0 addr0 args0 src :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src src' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r) args0 dst0 pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inl r) args0 dst0 pc'0) :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst'0 pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst0 dst'0 | RBnop :: RBexit None (RBcall sig (inr i) args0 dst0 pc'0) :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | _ => false end | _ => false end | Some (RTL.Istore chunk' addr' args' src' pc'') => match a with | RBstore None chunk addr args src => match b with | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args'0 dst' pc''0) => match b with | RBop None op args0 dst :: nil | RBop None op args0 dst :: RBnop :: nil | RBop None op args0 dst :: RBop _ _ _ _ :: nil | RBop None op args0 dst :: RBload _ _ _ _ _ :: nil | RBop None op args0 dst :: RBstore _ _ _ _ _ :: nil | RBop None op args0 dst :: RBsetpred _ _ _ _ :: nil | RBop None op args0 dst :: RBexit (Some _) _ :: nil | RBop None op args0 dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBjumptable _ _) :: nil | RBop None op args0 dst :: RBexit None (RBreturn _) :: nil => false | RBop None op args0 dst :: (RBnop :: _ :: _) as b' | RBop None op args0 dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | RBop None op args0 dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBop None op args0 dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk'0 addr'0 args'0 dst' pc''0) => match b with | RBload None chunk0 addr0 args0 dst :: nil | RBload None chunk0 addr0 args0 dst :: RBnop :: nil | RBload None chunk0 addr0 args0 dst :: RBop _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBload _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBstore _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBsetpred _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBexit (Some _) _ :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBreturn _) :: nil => false | RBload None chunk0 addr0 args0 dst :: (RBnop :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | RBload None chunk0 addr0 args0 dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk'0 addr'0 args'0 src'0 pc''0) => match b with | RBstore None chunk0 addr0 args0 src0 :: nil | RBstore None chunk0 addr0 args0 src0 :: RBnop :: nil | RBstore None chunk0 addr0 args0 src0 :: RBop _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBload _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBstore _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBsetpred _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit (Some _) _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk0 addr0 args0 src0 :: (RBnop :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 && check_code c tc pc''0 b' | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r0) args0 dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inl r0) args0 dst pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inr i) args0 dst pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r0) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r0) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r0 r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r0 ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r0 r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r0)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r0 r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | RBnop :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args'0 dst' pc''0) => match b with | RBop None op args0 dst :: nil | RBop None op args0 dst :: RBnop :: nil | RBop None op args0 dst :: RBop _ _ _ _ :: nil | RBop None op args0 dst :: RBload _ _ _ _ _ :: nil | RBop None op args0 dst :: RBstore _ _ _ _ _ :: nil | RBop None op args0 dst :: RBsetpred _ _ _ _ :: nil | RBop None op args0 dst :: RBexit (Some _) _ :: nil | RBop None op args0 dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBjumptable _ _) :: nil | RBop None op args0 dst :: RBexit None (RBreturn _) :: nil => false | RBop None op args0 dst :: (RBnop :: _ :: _) as b' | RBop None op args0 dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | RBop None op args0 dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBop None op args0 dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk'0 addr'0 args'0 dst' pc''0) => match b with | RBload None chunk0 addr0 args0 dst :: nil | RBload None chunk0 addr0 args0 dst :: RBnop :: nil | RBload None chunk0 addr0 args0 dst :: RBop _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBload _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBstore _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBsetpred _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBexit (Some _) _ :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBreturn _) :: nil => false | RBload None chunk0 addr0 args0 dst :: (RBnop :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | RBload None chunk0 addr0 args0 dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk'0 addr'0 args'0 src'0 pc''0) => match b with | RBstore None chunk0 addr0 args0 src0 :: nil | RBstore None chunk0 addr0 args0 src0 :: RBnop :: nil | RBstore None chunk0 addr0 args0 src0 :: RBop _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBload _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBstore _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBsetpred _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit (Some _) _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk0 addr0 args0 src0 :: (RBnop :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 && check_code c tc pc''0 b' | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r) args0 dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inl r) args0 dst pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inr i) args0 dst pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' | RBexit None (RBgoto pc') :: _ :: _ => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc''0) => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc''0 b' | RBnop :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 | RBnop :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => check_code c tc pc''0 b' | _ => false end | Some (RTL.Iop op' args'0 dst' pc''0) => match b with | RBop None op args0 dst :: nil | RBop None op args0 dst :: RBnop :: nil | RBop None op args0 dst :: RBop _ _ _ _ :: nil | RBop None op args0 dst :: RBload _ _ _ _ _ :: nil | RBop None op args0 dst :: RBstore _ _ _ _ _ :: nil | RBop None op args0 dst :: RBsetpred _ _ _ _ :: nil | RBop None op args0 dst :: RBexit (Some _) _ :: nil | RBop None op args0 dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args0 dst :: RBexit None (RBjumptable _ _) :: nil | RBop None op args0 dst :: RBexit None (RBreturn _) :: nil => false | RBop None op args0 dst :: (RBnop :: _ :: _) as b' | RBop None op args0 dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args0 dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args0 dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | RBop None op args0 dst :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBop None op args0 dst :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Iload chunk'0 addr'0 args'0 dst' pc''0) => match b with | RBload None chunk0 addr0 args0 dst :: nil | RBload None chunk0 addr0 args0 dst :: RBnop :: nil | RBload None chunk0 addr0 args0 dst :: RBop _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBload _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBstore _ _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBsetpred _ _ _ _ :: nil | RBload None chunk0 addr0 args0 dst :: RBexit (Some _) _ :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk0 addr0 args0 dst :: RBexit None (RBreturn _) :: nil => false | RBload None chunk0 addr0 args0 dst :: (RBnop :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | RBload None chunk0 addr0 args0 dst :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBload None chunk0 addr0 args0 dst :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq dst dst' && check_code c tc pc''0 b' | _ => false end | Some (RTL.Istore chunk'0 addr'0 args'0 src'0 pc''0) => match b with | RBstore None chunk0 addr0 args0 src0 :: nil | RBstore None chunk0 addr0 args0 src0 :: RBnop :: nil | RBstore None chunk0 addr0 args0 src0 :: RBop _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBload _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBstore _ _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBsetpred _ _ _ _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit (Some _) _ :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk0 addr0 args0 src0 :: (RBnop :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 && check_code c tc pc''0 b' | RBstore None chunk0 addr0 args0 src0 :: RBexit None (RBgoto pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 | RBstore None chunk0 addr0 args0 src0 :: (RBexit None (RBgoto pc'0) :: _ :: _) as b' => ceq memory_chunk_eq chunk0 chunk'0 && ceq addressing_eq addr0 addr'0 && ceq list_pos_eq args0 args'0 && ceq peq src0 src'0 && check_code c tc pc''0 b' | _ => false end | Some (RTL.Icall sig' (inl r') args'0 dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl r) args0 dst pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inl r) args0 dst pc'0) :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args'0 dst' pc''0) => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args0 dst pc'0) :: nil => check_valid_node tc pc'0 && ceq peq pc'0 pc''0 && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args0 args'0 && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inr i) args0 dst pc'0) :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inl r') args'0) :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args0) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args0 args'0 | RBnop :: RBexit None (RBtailcall sig' (inr r') args'0) :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args0 n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args0 args'0 && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args'0 n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) c tc pc'' b | _ => false end | _ => false end | Some (RTL.Icall sig' (inl r') args' dst' pc'') => match a with | RBnop => match b with | RBexit None (RBcall sig (inl r) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' && ceq peq dst dst' | RBexit None (RBcall sig (inl r) args dst pc') :: _ :: _ => false | RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | _ => false end | Some (RTL.Icall sig' (inr i') args' dst' pc'') => match a with | RBnop => match b with | RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBexit None (RBcall sig (inr i) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args args' && ceq peq dst dst' | RBexit None (RBcall sig (inr i) args dst pc') :: _ :: _ => false | _ => false end | _ => false end | Some (RTL.Itailcall sig (inl r) args) => match a with | RBnop => match b with | RBexit None (RBtailcall sig' (inl r') args') :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' | RBexit None (RBtailcall sig' (inl r') args') :: _ :: _ => false | RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | _ => false end | Some (RTL.Itailcall sig (inr r) args) => match a with | RBnop => match b with | RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBexit None (RBtailcall sig' (inr r') args') :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' | RBexit None (RBtailcall sig' (inr r') args') :: _ :: _ => false | _ => false end | _ => false end | Some (RTL.Icond cond args n1 n2) => match a with | RBnop => match b with | RBexit None (RBcond cond' args' n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args args' && ceq peq n1 n1' && ceq peq n2 n2' | RBexit None (RBcond cond' args' n1' n2') :: _ :: _ => false | _ => false end | _ => false end | Some (RTL.Ijumptable r ns) => match a with | RBnop => match b with | RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | _ => false end | Some (RTL.Ireturn (Some r)) => match a with | RBnop => match b with | RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | _ => false end | Some (RTL.Ireturn None) => match a with | RBnop => match b with | RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
n: RTL.node
Heqo: c ! pc = Some (RTL.Inop n)
H: match a with | RBnop => match b with | RBnop :: _ :: _ | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => check_code c tc n b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' n | RBexit None (RBgoto pc') :: _ :: _ => check_code c tc n b | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
o: Op.operation
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Iop o l r n)
H: match a with | RBop None op args dst => match b with | RBnop :: _ :: _ | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq operation_eq op o && ceq list_pos_eq args l && ceq peq dst r && check_code c tc n b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq operation_eq op o && ceq list_pos_eq args l && ceq peq dst r | RBexit None (RBgoto pc') :: _ :: _ => ceq operation_eq op o && ceq list_pos_eq args l && ceq peq dst r && check_code c tc n b | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Iload m a0 l r n)
H: match a with | RBload None chunk addr args dst => match b with | RBnop :: _ :: _ | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq dst r && check_code c tc n b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq dst r | RBexit None (RBgoto pc') :: _ :: _ => ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq dst r && check_code c tc n b | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Istore m a0 l r n)
H: match a with | RBstore None chunk addr args src => match b with | RBnop :: _ :: _ | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq src r && check_code c tc n b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq src r | RBexit None (RBgoto pc') :: _ :: _ => ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq src r && check_code c tc n b | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
s: signature
s0: (reg + ident)%type
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Icall s s0 l r n)
H: match s0 with | inl r' => match a with | RBnop => match b with | RBexit None (RBcall sig (inl r0) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq signature_eq sig s && ceq peq r0 r' && ceq list_pos_eq args l && ceq peq dst r | RBexit None (RBcall sig (inl r0) args dst pc') :: _ :: _ => false | RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | _ => false end | inr i' => match a with | RBnop => match b with | RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBexit None (RBcall sig (inr i) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq signature_eq sig s && ceq peq i i' && ceq list_pos_eq args l && ceq peq dst r | RBexit None (RBcall sig (inr i) args dst pc') :: _ :: _ => false | _ => false end | _ => false end end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
s: signature
s0: (reg + ident)%type
l: list reg
Heqo: c ! pc = Some (RTL.Itailcall s s0 l)
H: match s0 with | inl r => match a with | RBnop => match b with | RBexit None (RBtailcall sig' (inl r') args') :: nil => ceq signature_eq s sig' && ceq peq r r' && ceq list_pos_eq l args' | RBexit None (RBtailcall sig' (inl r') args') :: _ :: _ => false | RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | _ => false end | inr r => match a with | RBnop => match b with | RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBexit None (RBtailcall sig' (inr r') args') :: nil => ceq signature_eq s sig' && ceq peq r r' && ceq list_pos_eq l args' | RBexit None (RBtailcall sig' (inr r') args') :: _ :: _ => false | _ => false end | _ => false end end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
c0: Op.condition
l: list reg
n, n0: RTL.node
Heqo: c ! pc = Some (RTL.Icond c0 l n n0)
H: match a with | RBnop => match b with | RBexit None (RBcond cond' args' n1' n2') :: nil => check_valid_node tc n && check_valid_node tc n0 && ceq condition_eq c0 cond' && ceq list_pos_eq l args' && ceq peq n n1' && ceq peq n0 n2' | RBexit None (RBcond cond' args' n1' n2') :: _ :: _ => false | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
r: reg
l: list RTL.node
Heqo: c ! pc = Some (RTL.Ijumptable r l)
H: match a with | RBnop => match b with | RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq l ns' && forallb (check_valid_node tc) l | RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
o: option reg
Heqo: c ! pc = Some (RTL.Ireturn o)
H: match o with | Some r => match a with | RBnop => match b with | RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | _ => false end | None => match a with | RBnop => match b with | RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
n: RTL.node
Heqo: c ! pc = Some (RTL.Inop n)
H: match a with | RBnop => match b with | RBnop :: _ :: _ | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => check_code c tc n b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' n | RBexit None (RBgoto pc') :: _ :: _ => check_code c tc n b | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
i: instr
l: list instr
o: option pred_op
c0: cf_instr
Heqo0: o = None
n0: node
Heqc1: c0 = RBgoto n0
Heqi0: i = RBexit None (RBgoto n0)
Heql0: l = nil
Heql: b = RBexit None (RBgoto n0) :: nil
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n0) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n0) :: nil)
pc: node
n: RTL.node
Heqo: c ! pc = Some (RTL.Inop n)
Heqi: a = RBnop
H: check_valid_node tc n0 && ceq peq n0 n = truematch_block c tc pc (RBnop :: RBexit None (RBgoto n0) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n) :: nil)
pc: node
Heqo: c ! pc = Some (RTL.Inop n)
H0: check_valid_node tc n = truematch_block c tc pc (RBnop :: RBexit None (RBgoto n) :: nil)eauto using check_valid_node_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n) :: nil)
pc: node
Heqo: c ! pc = Some (RTL.Inop n)
H0: check_valid_node tc n = truevalid_succ tc nprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
o: Op.operation
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Iop o l r n)
H: match a with | RBop None op args dst => match b with | RBnop :: _ :: _ | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq operation_eq op o && ceq list_pos_eq args l && ceq peq dst r && check_code c tc n b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq operation_eq op o && ceq list_pos_eq args l && ceq peq dst r | RBexit None (RBgoto pc') :: _ :: _ => ceq operation_eq op o && ceq list_pos_eq args l && ceq peq dst r && check_code c tc n b | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n0: node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n0) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n0) :: nil)
pc: node
o: Op.operation
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Iop o l r n)
o1: Op.operation
l0: list reg
r0: reg
H: check_valid_node tc n0 && ceq peq n0 n && ceq operation_eq o1 o && ceq list_pos_eq l0 l && ceq peq r0 r = truematch_block c tc pc (RBop None o1 l0 r0 :: RBexit None (RBgoto n0) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n) :: nil)
pc: node
o: Op.operation
l: list reg
r: reg
Heqo: c ! pc = Some (RTL.Iop o l r n)
H: check_valid_node tc n = truematch_block c tc pc (RBop None o l r :: RBexit None (RBgoto n) :: nil)eauto using check_valid_node_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n) :: nil)
pc: node
o: Op.operation
l: list reg
r: reg
Heqo: c ! pc = Some (RTL.Iop o l r n)
H: check_valid_node tc n = truevalid_succ tc nprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Iload m a0 l r n)
H: match a with | RBload None chunk addr args dst => match b with | RBnop :: _ :: _ | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq dst r && check_code c tc n b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq dst r | RBexit None (RBgoto pc') :: _ :: _ => ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq dst r && check_code c tc n b | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n0: node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n0) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n0) :: nil)
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Iload m a0 l r n)
m0: memory_chunk
a1: Op.addressing
l0: list reg
r0: reg
H: check_valid_node tc n0 && ceq peq n0 n && ceq memory_chunk_eq m0 m && ceq addressing_eq a1 a0 && ceq list_pos_eq l0 l && ceq peq r0 r = truematch_block c tc pc (RBload None m0 a1 l0 r0 :: RBexit None (RBgoto n0) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n) :: nil)
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
Heqo: c ! pc = Some (RTL.Iload m a0 l r n)
H0: check_valid_node tc n = truematch_block c tc pc (RBload None m a0 l r :: RBexit None (RBgoto n) :: nil)eauto using check_valid_node_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n) :: nil)
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
Heqo: c ! pc = Some (RTL.Iload m a0 l r n)
H0: check_valid_node tc n = truevalid_succ tc nprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Istore m a0 l r n)
H: match a with | RBstore None chunk addr args src => match b with | RBnop :: _ :: _ | RBop _ _ _ _ :: _ :: _ | RBload _ _ _ _ _ :: _ :: _ | RBstore _ _ _ _ _ :: _ :: _ | RBsetpred _ _ _ _ :: _ :: _ | RBexit (Some _) _ :: _ :: _ | RBexit None (RBcall _ _ _ _ _) :: _ :: _ | RBexit None (RBtailcall _ _ _) :: _ :: _ | RBexit None (RBbuiltin _ _ _ _) :: _ :: _ | RBexit None (RBcond _ _ _ _) :: _ :: _ | RBexit None (RBjumptable _ _) :: _ :: _ | RBexit None (RBreturn _) :: _ :: _ => ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq src r && check_code c tc n b | RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq src r | RBexit None (RBgoto pc') :: _ :: _ => ceq memory_chunk_eq chunk m && ceq addressing_eq addr a0 && ceq list_pos_eq args l && ceq peq src r && check_code c tc n b | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n0: node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n0) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n0) :: nil)
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Istore m a0 l r n)
m0: memory_chunk
a1: Op.addressing
l0: list reg
r0: reg
H: check_valid_node tc n0 && ceq peq n0 n && ceq memory_chunk_eq m0 m && ceq addressing_eq a1 a0 && ceq list_pos_eq l0 l && ceq peq r0 r = truematch_block c tc pc (RBstore None m0 a1 l0 r0 :: RBexit None (RBgoto n0) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n) :: nil)
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
Heqo: c ! pc = Some (RTL.Istore m a0 l r n)
H0: check_valid_node tc n = truematch_block c tc pc (RBstore None m a0 l r :: RBexit None (RBgoto n) :: nil)eauto using check_valid_node_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBgoto n) :: nil) = true -> match_block c tc pc (RBexit None (RBgoto n) :: nil)
pc: node
m: memory_chunk
a0: Op.addressing
l: list reg
r: reg
Heqo: c ! pc = Some (RTL.Istore m a0 l r n)
H0: check_valid_node tc n = truevalid_succ tc nprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
s: signature
s0: (reg + ident)%type
l: list reg
r: reg
n: RTL.node
Heqo: c ! pc = Some (RTL.Icall s s0 l r n)
H: match s0 with | inl r' => match a with | RBnop => match b with | RBexit None (RBcall sig (inl r0) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq signature_eq sig s && ceq peq r0 r' && ceq list_pos_eq args l && ceq peq dst r | RBexit None (RBcall sig (inl r0) args dst pc') :: _ :: _ => false | RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | _ => false end | inr i' => match a with | RBnop => match b with | RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBexit None (RBcall sig (inr i) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' n && ceq signature_eq sig s && ceq peq i i' && ceq list_pos_eq args l && ceq peq dst r | RBexit None (RBcall sig (inr i) args dst pc') :: _ :: _ => false | _ => false end | _ => false end end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
s1: signature
l1: list reg
r1: reg
n0: node
r2: reg
IHb: forall pc : node, check_code c tc pc (RBexit None (RBcall s1 (inl r2) l1 r1 n0) :: nil) = true -> match_block c tc pc (RBexit None (RBcall s1 (inl r2) l1 r1 n0) :: nil)
pc: node
s: signature
l: list reg
r: reg
n: RTL.node
r0: reg
Heqo: c ! pc = Some (RTL.Icall s (inl r0) l r n)
H: check_valid_node tc n0 && ceq peq n0 n && ceq signature_eq s1 s && ceq peq r2 r0 && ceq list_pos_eq l1 l && ceq peq r1 r = truematch_block c tc pc (RBnop :: RBexit None (RBcall s1 (inl r2) l1 r1 n0) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
s1: signature
l1: list reg
r0: reg
n0: node
i1: ident
IHb: forall pc : node, check_code c tc pc (RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil) = true -> match_block c tc pc (RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil)
pc: node
s: signature
l: list reg
r: reg
n: RTL.node
i: ident
Heqo: c ! pc = Some (RTL.Icall s (inr i) l r n)
H: check_valid_node tc n0 && ceq peq n0 n && ceq signature_eq s1 s && ceq peq i1 i && ceq list_pos_eq l1 l && ceq peq r0 r = truematch_block c tc pc (RBnop :: RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
s: signature
r0: reg
l: list reg
r: reg
IHb: forall pc : node, check_code c tc pc (RBexit None (RBcall s (inl r0) l r n) :: nil) = true -> match_block c tc pc (RBexit None (RBcall s (inl r0) l r n) :: nil)
pc: node
Heqo: c ! pc = Some (RTL.Icall s (inl r0) l r n)
H0: check_valid_node tc n = truematch_block c tc pc (RBnop :: RBexit None (RBcall s (inl r0) l r n) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
s1: signature
l1: list reg
r0: reg
n0: node
i1: ident
IHb: forall pc : node, check_code c tc pc (RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil) = true -> match_block c tc pc (RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil)
pc: node
s: signature
l: list reg
r: reg
n: RTL.node
i: ident
Heqo: c ! pc = Some (RTL.Icall s (inr i) l r n)
H: check_valid_node tc n0 && ceq peq n0 n && ceq signature_eq s1 s && ceq peq i1 i && ceq list_pos_eq l1 l && ceq peq r0 r = truematch_block c tc pc (RBnop :: RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
s1: signature
l1: list reg
r0: reg
n0: node
i1: ident
IHb: forall pc : node, check_code c tc pc (RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil) = true -> match_block c tc pc (RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil)
pc: node
s: signature
l: list reg
r: reg
n: RTL.node
i: ident
Heqo: c ! pc = Some (RTL.Icall s (inr i) l r n)
H: check_valid_node tc n0 && ceq peq n0 n && ceq signature_eq s1 s && ceq peq i1 i && ceq list_pos_eq l1 l && ceq peq r0 r = truematch_block c tc pc (RBnop :: RBexit None (RBcall s1 (inr i1) l1 r0 n0) :: nil)eapply match_block_call; eauto using check_valid_node_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
n: RTL.node
s: signature
i: ident
l: list reg
r: reg
IHb: forall pc : node, check_code c tc pc (RBexit None (RBcall s (inr i) l r n) :: nil) = true -> match_block c tc pc (RBexit None (RBcall s (inr i) l r n) :: nil)
pc: node
Heqo: c ! pc = Some (RTL.Icall s (inr i) l r n)
H0: check_valid_node tc n = truematch_block c tc pc (RBnop :: RBexit None (RBcall s (inr i) l r n) :: nil)repeat (destruct_match; try discriminate); subst; try solve [unfold_ands; econstructor; eauto].prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
s: signature
s0: (reg + ident)%type
l: list reg
Heqo: c ! pc = Some (RTL.Itailcall s s0 l)
H: match s0 with | inl r => match a with | RBnop => match b with | RBexit None (RBtailcall sig' (inl r') args') :: nil => ceq signature_eq s sig' && ceq peq r r' && ceq list_pos_eq l args' | RBexit None (RBtailcall sig' (inl r') args') :: _ :: _ => false | RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | _ => false end | inr r => match a with | RBnop => match b with | RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBexit None (RBtailcall sig' (inr r') args') :: nil => ceq signature_eq s sig' && ceq peq r r' && ceq list_pos_eq l args' | RBexit None (RBtailcall sig' (inr r') args') :: _ :: _ => false | _ => false end | _ => false end end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
c0: Op.condition
l: list reg
n, n0: RTL.node
Heqo: c ! pc = Some (RTL.Icond c0 l n n0)
H: match a with | RBnop => match b with | RBexit None (RBcond cond' args' n1' n2') :: nil => check_valid_node tc n && check_valid_node tc n0 && ceq condition_eq c0 cond' && ceq list_pos_eq l args' && ceq peq n n1' && ceq peq n0 n2' | RBexit None (RBcond cond' args' n1' n2') :: _ :: _ => false | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
c2: Op.condition
l1: list reg
n1, n2: node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBcond c2 l1 n1 n2) :: nil) = true -> match_block c tc pc (RBexit None (RBcond c2 l1 n1 n2) :: nil)
pc: node
c0: Op.condition
l: list reg
n, n0: RTL.node
Heqo: c ! pc = Some (RTL.Icond c0 l n n0)
H: check_valid_node tc n && check_valid_node tc n0 && ceq condition_eq c0 c2 && ceq list_pos_eq l l1 && ceq peq n n1 && ceq peq n0 n2 = truematch_block c tc pc (RBnop :: RBexit None (RBcond c2 l1 n1 n2) :: nil)eapply match_block_cond; eauto using check_valid_node_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
c2: Op.condition
l1: list reg
n1, n2: node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBcond c2 l1 n1 n2) :: nil) = true -> match_block c tc pc (RBexit None (RBcond c2 l1 n1 n2) :: nil)
pc: node
Heqo: c ! pc = Some (RTL.Icond c2 l1 n1 n2)
H0: check_valid_node tc n1 = true
H5: check_valid_node tc n2 = truematch_block c tc pc (RBnop :: RBexit None (RBcond c2 l1 n1 n2) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
r: reg
l: list RTL.node
Heqo: c ! pc = Some (RTL.Ijumptable r l)
H: match a with | RBnop => match b with | RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq l ns' && forallb (check_valid_node tc) l | RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | _ => false end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
r0: reg
l1: list node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBjumptable r0 l1) :: nil) = true -> match_block c tc pc (RBexit None (RBjumptable r0 l1) :: nil)
pc: node
r: reg
l: list RTL.node
Heqo: c ! pc = Some (RTL.Ijumptable r l)
H: ceq peq r r0 && ceq list_pos_eq l l1 && forallb (check_valid_node tc) l = truematch_block c tc pc (RBnop :: RBexit None (RBjumptable r0 l1) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
r0: reg
l1: list node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBjumptable r0 l1) :: nil) = true -> match_block c tc pc (RBexit None (RBjumptable r0 l1) :: nil)
pc: node
H1: forallb (check_valid_node tc) l1 = true
Heqo: c ! pc = Some (RTL.Ijumptable r0 l1)match_block c tc pc (RBnop :: RBexit None (RBjumptable r0 l1) :: nil)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
r0: reg
l1: list node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBjumptable r0 l1) :: nil) = true -> match_block c tc pc (RBexit None (RBjumptable r0 l1) :: nil)
pc: node
H1: forallb (check_valid_node tc) l1 = true
Heqo: c ! pc = Some (RTL.Ijumptable r0 l1)Forall (valid_succ tc) l1eapply forallb_forall in H1; eauto using check_valid_node_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
r0: reg
l1: list node
IHb: forall pc : node, check_code c tc pc (RBexit None (RBjumptable r0 l1) :: nil) = true -> match_block c tc pc (RBexit None (RBjumptable r0 l1) :: nil)
pc: node
H1: forallb (check_valid_node tc) l1 = true
Heqo: c ! pc = Some (RTL.Ijumptable r0 l1)
x: node
H: In x l1valid_succ tc xrepeat (destruct_match; try discriminate); subst; try solve [unfold_ands; econstructor; eauto]. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
c: RTL.code
tc: code
a: instr
b: list instr
IHb: forall pc : node, check_code c tc pc b = true -> match_block c tc pc b
pc: node
o: option reg
Heqo: c ! pc = Some (RTL.Ireturn o)
H: match o with | Some r => match a with | RBnop => match b with | RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | _ => false end | None => match a with | RBnop => match b with | RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end end = truematch_block c tc pc (a :: b)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (f : RTL.function) (tf : function), transl_function f = OK tf -> match_code (RTL.fn_code f) (fn_code tf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (f : RTL.function) (tf : function), transl_function f = OK tf -> match_code (RTL.fn_code f) (fn_code tf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
tf: function
H: match partition f with | OK f' => if check_valid_node (fn_code f') (RTL.fn_entrypoint f) then if forall_ptree (check_code (RTL.fn_code f) (fn_code f')) (fn_code f') then OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f'; fn_entrypoint := RTL.fn_entrypoint f |} else Error (msg "check_present_blocks failed") else Error (msg "entrypoint does not exists") | Error msg => Error msg end = OK tfmatch_code (RTL.fn_code f) (fn_code tf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
tf, f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = true
H: OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |} = OK tfmatch_code (RTL.fn_code f) (fn_code tf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = truematch_code (RTL.fn_code f) (fn_code {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |})prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = truematch_code (RTL.fn_code f) (fn_code f0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = true
pc: positive
b: SeqBB.t
H: (fn_code f0) ! pc = Some bmatch_block (RTL.fn_code f) (fn_code f0) pc bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
pc: positive
b: SeqBB.t
H: (fn_code f0) ! pc = Some b
Heqb0: check_code (RTL.fn_code f) (fn_code f0) pc b = truematch_block (RTL.fn_code f) (fn_code f0) pc beauto using transl_match_code'. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
f: RTL.function
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
pc: positive
b: SeqBB.t
H: (fn_code f0) ! pc = Some b
Heqb0: (fix check_code (c : RTL.code) (tc : code) (pc : node) (b : SeqBB.t) {struct b} : bool := match c ! pc with | Some (RTL.Inop pc'') => match b with | RBnop :: (RBnop :: _ :: _) as b' | RBnop :: (RBop _ _ _ _ :: _ :: _) as b' | RBnop :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBnop :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBnop :: (RBexit (Some _) _ :: _ :: _) as b' | RBnop :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBnop :: (RBexit None (RBreturn _) :: _ :: _) as b' => check_code c tc pc'' b' | RBnop :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' | RBnop :: (RBexit None (RBgoto pc') :: _ :: _) as b' => check_code c tc pc'' b' | _ => false end | Some (RTL.Iop op' args' dst' pc'') => match b with | RBop None op args dst :: nil | RBop None op args dst :: RBnop :: nil | RBop None op args dst :: RBop _ _ _ _ :: nil | RBop None op args dst :: RBload _ _ _ _ _ :: nil | RBop None op args dst :: RBstore _ _ _ _ _ :: nil | RBop None op args dst :: RBsetpred _ _ _ _ :: nil | RBop None op args dst :: RBexit (Some _) _ :: nil | RBop None op args dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBtailcall _ _ _) :: nil | RBop None op args dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBcond _ _ _ _) :: nil | RBop None op args dst :: RBexit None (RBjumptable _ _) :: nil | RBop None op args dst :: RBexit None (RBreturn _) :: nil => false | RBop None op args dst :: (RBnop :: _ :: _) as b' | RBop None op args dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBop None op args dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBop None op args dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc'' b' | RBop None op args dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' | RBop None op args dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq operation_eq op op' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc'' b' | _ => false end | Some (RTL.Iload chunk' addr' args' dst' pc'') => match b with | RBload None chunk addr args dst :: nil | RBload None chunk addr args dst :: RBnop :: nil | RBload None chunk addr args dst :: RBop _ _ _ _ :: nil | RBload None chunk addr args dst :: RBload _ _ _ _ _ :: nil | RBload None chunk addr args dst :: RBstore _ _ _ _ _ :: nil | RBload None chunk addr args dst :: RBsetpred _ _ _ _ :: nil | RBload None chunk addr args dst :: RBexit (Some _) _ :: nil | RBload None chunk addr args dst :: RBexit None (RBcall _ _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBtailcall _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBcond _ _ _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBjumptable _ _) :: nil | RBload None chunk addr args dst :: RBexit None (RBreturn _) :: nil => false | RBload None chunk addr args dst :: (RBnop :: _ :: _) as b' | RBload None chunk addr args dst :: (RBop _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit (Some _) _ :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBload None chunk addr args dst :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc'' b' | RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' | RBload None chunk addr args dst :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq dst dst' && check_code c tc pc'' b' | _ => false end | Some (RTL.Istore chunk' addr' args' src' pc'') => match b with | RBstore None chunk addr args src :: nil | RBstore None chunk addr args src :: RBnop :: nil | RBstore None chunk addr args src :: RBop _ _ _ _ :: nil | RBstore None chunk addr args src :: RBload _ _ _ _ _ :: nil | RBstore None chunk addr args src :: RBstore _ _ _ _ _ :: nil | RBstore None chunk addr args src :: RBsetpred _ _ _ _ :: nil | RBstore None chunk addr args src :: RBexit (Some _) _ :: nil | RBstore None chunk addr args src :: RBexit None (RBcall _ _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBtailcall _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBbuiltin _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBcond _ _ _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBjumptable _ _) :: nil | RBstore None chunk addr args src :: RBexit None (RBreturn _) :: nil => false | RBstore None chunk addr args src :: (RBnop :: _ :: _) as b' | RBstore None chunk addr args src :: (RBop _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBload _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBstore _ _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBsetpred _ _ _ _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit (Some _) _ :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBcall _ _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBtailcall _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBbuiltin _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBcond _ _ _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBjumptable _ _) :: _ :: _) as b' | RBstore None chunk addr args src :: (RBexit None (RBreturn _) :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && check_code c tc pc'' b' | RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' | RBstore None chunk addr args src :: (RBexit None (RBgoto pc') :: _ :: _) as b' => ceq memory_chunk_eq chunk chunk' && ceq addressing_eq addr addr' && ceq list_pos_eq args args' && ceq peq src src' && check_code c tc pc'' b' | _ => false end | Some (RTL.Icall sig' (inl r') args' dst' pc'') => match b with | RBnop :: RBexit None (RBcall sig (inl r) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inl r) args dst pc') :: _ :: _ => false | RBnop :: RBexit None (RBcall sig (inr _) _ _ _) :: _ => false | _ => false end | Some (RTL.Icall sig' (inr i') args' dst' pc'') => match b with | RBnop :: RBexit None (RBcall sig (inl _) _ _ _) :: _ => false | RBnop :: RBexit None (RBcall sig (inr i) args dst pc') :: nil => check_valid_node tc pc' && ceq peq pc' pc'' && ceq signature_eq sig sig' && ceq peq i i' && ceq list_pos_eq args args' && ceq peq dst dst' | RBnop :: RBexit None (RBcall sig (inr i) args dst pc') :: _ :: _ => false | _ => false end | Some (RTL.Itailcall sig (inl r) args) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl r') args') :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' | RBnop :: RBexit None (RBtailcall sig' (inl r') args') :: _ :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr _) _) :: _ => false | _ => false end | Some (RTL.Itailcall sig (inr r) args) => match b with | RBnop :: RBexit None (RBtailcall sig' (inl _) _) :: _ => false | RBnop :: RBexit None (RBtailcall sig' (inr r') args') :: nil => ceq signature_eq sig sig' && ceq peq r r' && ceq list_pos_eq args args' | RBnop :: RBexit None (RBtailcall sig' (inr r') args') :: _ :: _ => false | _ => false end | Some (RTL.Icond cond args n1 n2) => match b with | RBnop :: RBexit None (RBcond cond' args' n1' n2') :: nil => check_valid_node tc n1 && check_valid_node tc n2 && ceq condition_eq cond cond' && ceq list_pos_eq args args' && ceq peq n1 n1' && ceq peq n2 n2' | RBnop :: RBexit None (RBcond cond' args' n1' n2') :: _ :: _ => false | _ => false end | Some (RTL.Ijumptable r ns) => match b with | RBnop :: RBexit None (RBjumptable r' ns') :: nil => ceq peq r r' && ceq list_pos_eq ns ns' && forallb (check_valid_node tc) ns | RBnop :: RBexit None (RBjumptable r' ns') :: _ :: _ => false | _ => false end | Some (RTL.Ireturn (Some r)) => match b with | RBnop :: RBexit None (RBreturn (Some r')) :: nil => ceq peq r r' | RBnop :: RBexit None (RBreturn (Some r')) :: _ :: _ => false | _ => false end | Some (RTL.Ireturn None) => match b with | RBnop :: RBexit None (RBreturn None) :: nil => true | _ => false end | _ => false end) (RTL.fn_code f) (fn_code f0) pc b = truematch_block (RTL.fn_code f) (fn_code f0) pc bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall s1 : RTL.state, RTL.initial_state prog s1 -> exists s2 : state, initial_state tprog s2 /\ match_states None s1 s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall s1 : RTL.state, RTL.initial_state prog s1 -> exists s2 : state, initial_state tprog s2 /\ match_states None s1 s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_mainexists s2 : state, initial_state tprog s2 /\ match_states None (RTL.Callstate nil f nil m0) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main(exists tf : fundef, Genv.find_funct_ptr tge b = Some tf /\ transl_fundef f = OK tf) -> exists s2 : state, initial_state tprog s2 /\ match_states None (RTL.Callstate nil f nil m0) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfexists s2 : state, initial_state tprog s2 /\ match_states None (RTL.Callstate nil f nil m0) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfinitial_state tprog ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfinitial_state tprog ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.init_mem tprog = Some ?m0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.find_symbol (Genv.globalenv tprog) (prog_main tprog) = Some ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.find_funct_ptr (Genv.globalenv tprog) ?b = Some ?fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tffunsig ?f = signature_mainprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) (Callstate nil ?f nil ?m0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.find_symbol (Genv.globalenv tprog) (prog_main tprog) = Some ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.find_funct_ptr (Genv.globalenv tprog) ?b = Some ?fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tffunsig ?f = signature_mainprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) (Callstate nil ?f nil m0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.find_symbol (Genv.globalenv tprog) (prog_main prog) = Some ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfprog_main prog = prog_main tprogprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.find_funct_ptr (Genv.globalenv tprog) ?b = Some ?fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tffunsig ?f = signature_mainprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) (Callstate nil ?f nil m0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfprog_main prog = prog_main tprogprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.find_funct_ptr (Genv.globalenv tprog) b = Some ?fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tffunsig ?f = signature_mainprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) (Callstate nil ?f nil m0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfGenv.find_funct_ptr (Genv.globalenv tprog) b = Some ?fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tffunsig ?f = signature_mainprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) (Callstate nil ?f nil m0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tffunsig tf = signature_mainprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) (Callstate nil tf nil m0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfmatch_states None (RTL.Callstate nil f nil m0) (Callstate nil tf nil m0)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tftransl_fundef f = OK tfprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfForall2 match_stackframe nil nilauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
b: block
f: RTL.fundef
m0: mem
ge0:= Genv.globalenv prog: Genv.t RTL.fundef unit
H: Genv.init_mem prog = Some m0
H0: Genv.find_symbol ge0 (prog_main prog) = Some b
H1: Genv.find_funct_ptr ge0 b = Some f
H2: RTL.funsig f = signature_main
tf: fundef
A: Genv.find_funct_ptr tge b = Some tf
B: transl_fundef f = OK tfForall2 match_stackframe nil nilprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : RTL.state) (s2 : state) (r : Integers.Int.int) (b : option SeqBB.t), match_states b s1 s2 -> RTL.final_state s1 r -> final_state s2 rprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : RTL.state) (s2 : state) (r : Integers.Int.int) (b : option SeqBB.t), match_states b s1 s2 -> RTL.final_state s1 r -> final_state s2 rprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s1: RTL.state
s2: state
r: Integers.Int.int
b: option SeqBB.t
H: match_states b s1 s2
H0: RTL.final_state s1 r
r0: Integers.Int.int
m: mem
H1: RTL.Returnstate nil (Vint r0) m = s1
H2: r0 = rfinal_state s2 rprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s2: state
r: Integers.Int.int
b: option SeqBB.t
m: mem
H: match_states b (RTL.Returnstate nil (Vint r) m) s2
H0: RTL.final_state (RTL.Returnstate nil (Vint r) m) rfinal_state s2 rprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
r: Integers.Int.int
m: mem
H0: RTL.final_state (RTL.Returnstate nil (Vint r) m) r
cs': list stackframe
STK: Forall2 match_stackframe nil cs'final_state (Returnstate cs' (Vint r) m) reconstructor. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
r: Integers.Int.int
m: mem
H0: RTL.final_state (RTL.Returnstate nil (Vint r) m) rfinal_state (Returnstate nil (Vint r) m) rprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (A : Type) (n : nat) (l : list A), hd_error (list_drop n l) = nth_error l ninduction n; destruct l; crush. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (A : Type) (n : nat) (l : list A), hd_error (list_drop n l) = nth_error l nprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (A : Type) (l : list A) (n : A), hd_error l = Some n -> l = n :: tl linduction l; crush. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (A : Type) (l : list A) (n : A), hd_error l = Some n -> l = n :: tl lprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
pc, pc': node{imm_succ pc pc'} + {~ imm_succ pc pc'}prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
pc, pc': node{imm_succ pc pc'} + {~ imm_succ pc pc'}prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
pc, pc': node{pc' = Pos.pred pc} + {pc' <> Pos.pred pc}decide equality. Defined.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
pc, pc': node
H: forall x y : positive, {x = y} + {x <> y}{pc' = Pos.pred pc} + {pc' <> Pos.pred pc}prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
pc: nodeimm_succ pc (Pos.pred pc)unfold imm_succ; auto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
pc: nodeimm_succ pc (Pos.pred pc)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
pc: positiveimm_succ (Pos.succ pc) pcunfold imm_succ; auto using Pos.pred_succ. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
pc: positiveimm_succ (Pos.succ pc) pcprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : state) (b : option SeqBB.t) (t : trace) (s : RTL.state), (exists (b' : option SeqBB.t) (s2 : state), star step tge s1 t s2 /\ ltof (option SeqBB.t) measure b' b /\ match_states b' s s2) -> exists (b' : option SeqBB.t) (s2 : state), (plus step tge s1 t s2 \/ star step tge s1 t s2 /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' s s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : state) (b : option SeqBB.t) (t : trace) (s : RTL.state), (exists (b' : option SeqBB.t) (s2 : state), star step tge s1 t s2 /\ ltof (option SeqBB.t) measure b' b /\ match_states b' s s2) -> exists (b' : option SeqBB.t) (s2 : state), (plus step tge s1 t s2 \/ star step tge s1 t s2 /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' s s2do 3 econstructor; eauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s1: state
b: option SeqBB.t
t: trace
s: RTL.state
x: option SeqBB.t
x0: state
H0: star step tge s1 t x0
H: ltof (option SeqBB.t) measure x b
H2: match_states x s x0exists (b' : option SeqBB.t) (s2 : state), (plus step tge s1 t s2 \/ star step tge s1 t s2 /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' s s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : state) (b : option SeqBB.t) (t : trace) (s : RTL.state), (exists (b' : option SeqBB.t) (s2 : state), plus step tge s1 t s2 /\ match_states b' s s2) -> exists (b' : option SeqBB.t) (s2 : state), (plus step tge s1 t s2 \/ star step tge s1 t s2 /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' s s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : state) (b : option SeqBB.t) (t : trace) (s : RTL.state), (exists (b' : option SeqBB.t) (s2 : state), plus step tge s1 t s2 /\ match_states b' s s2) -> exists (b' : option SeqBB.t) (s2 : state), (plus step tge s1 t s2 \/ star step tge s1 t s2 /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' s s2do 3 econstructor; eauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s1: state
b: option SeqBB.t
t: trace
s: RTL.state
x: option SeqBB.t
x0: state
H0: plus step tge s1 t x0
H1: match_states x s x0exists (b' : option SeqBB.t) (s2 : state), (plus step tge s1 t s2 \/ star step tge s1 t s2 /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' s s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : RTL.regset) (m : mem) (pc' : RTL.node), (RTL.fn_code f) ! pc = Some (RTL.Inop pc') -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : RTL.regset) (m : mem) (pc' : RTL.node), (RTL.fn_code f) ! pc = Some (RTL.Inop pc') -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H0: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H3: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H0: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H3: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBnop :: b))) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H0: match_states (Some (RBnop :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBnop :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBnop :: b))) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ ltof (option SeqBB.t) measure b' (Some (RBnop :: b)) /\ match_states b' (RTL.State s f sp pc' rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hstar step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBnop :: b)) /\ match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBnop :: b)) /\ match_states ?b' (RTL.State s f sp pc' rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBnop :: b))prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hmatch_states ?b' (RTL.State s f sp pc' rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hmatch_states (Some b) (RTL.State s f sp pc' rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hexists b' : SeqBB.t, (fn_code tf) ! pc1 = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hstar RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc' rs m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hstar RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc' rs m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt HRTL.step ge (RTL.State s f sp pc rs m) ?t2 (RTL.State s f sp pc' rs m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt HE0 = E0 ** ?t2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt HE0 = E0 ** E0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: b)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: b) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hforall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) b out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H0: match_states (Some (RBnop :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: b) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' b
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
out_s: istate
block2: SeqBB.t
H3: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) b out_s
H5: (fn_code tf) ! pc1 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H8: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H8: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec ?state') (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H8: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H8: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H7: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H9: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H8: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)inv H4; inv H8.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H0: match_states (Some (RBnop :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
block2: SeqBB.t
H5: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H8: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H0: match_states (Some (RBnop :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBnop :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H0: match_states (Some (RBnop :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBnop :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H0: match_states (Some (RBnop :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
BLOCK: exists b' : SeqBB.t, (fn_code tf) ! pc1 = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H4: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some ?bbprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) ?bb (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc')) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBgoto pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBgoto pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) (State stk' tf sp pc' rs (PMap.init false) m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists b' : SeqBB.t, (fn_code tf) ! pc' = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' rs m) E0 (RTL.State s f sp pc' rs m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' rs m) E0 (RTL.State s f sp pc' rs m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0 out_s -> (fn_code tf) ! pc' = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H4: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H6: (fn_code tf) ! pc' = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_scrush. } Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H2: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')
Learn: Learnt H
TF0: transl_function f = OK tf
CODE0: match_code (RTL.fn_code f) (fn_code tf)
STK0: Forall2 match_stackframe s stk'
STARSIMU0: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB0: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc (RBnop :: RBexit None (RBgoto pc') :: nil)
Learn0: Learnt H2
x0: SeqBB.t
out_s: istate
block2: SeqBB.t
H0: Some block2 = Some x0
H4: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H6: (fn_code tf) ! pc' = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (sp0 : val) (op : Op.operation) (vl : list val) (m : mem), Op.eval_operation ge sp0 op vl m = Op.eval_operation tge sp0 op vl mprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (sp0 : val) (op : Op.operation) (vl : list val) (m : mem), Op.eval_operation ge sp0 op vl m = Op.eval_operation tge sp0 op vl mdestruct op; auto; unfold Op.eval_operation, Genv.symbol_address, Op.eval_addressing32; [| destruct a; unfold Genv.symbol_address ]; try rewrite symbols_preserved; auto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
sp0: val
op: Op.operation
vl: list val
m: memOp.eval_operation ge sp0 op vl m = Op.eval_operation tge sp0 op vl mprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (sp : val) (addr : Op.addressing) (vl : list val), Op.eval_addressing ge sp addr vl = Op.eval_addressing tge sp addr vlprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (sp : val) (addr : Op.addressing) (vl : list val), Op.eval_addressing ge sp addr vl = Op.eval_addressing tge sp addr vldestruct addr; unfold Op.eval_addressing, Op.eval_addressing32; unfold Genv.symbol_address; try rewrite symbols_preserved; auto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
sp: val
addr: Op.addressing
vl: list valOp.eval_addressing ge sp addr vl = Op.eval_addressing tge sp addr vlprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (op : Op.operation) (args : list reg) (res0 : reg) (pc' : RTL.node) (v : val) (stk' : list stackframe) (tf : function) (pc1 : RTL.node) (rs1 : RTL.regset) (m1 : mem) (b : list instr) (x : SeqBB.t), (RTL.fn_code f) ! pc = Some (RTL.Iop op args res0 pc') -> Op.eval_operation ge sp op rs ## args m = Some v -> transl_function f = OK tf -> (forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0) -> Forall2 match_stackframe s stk' -> star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m) -> sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res0 :: b) -> (fn_code tf) ! pc1 = Some x -> match_block (RTL.fn_code f) (fn_code tf) pc' b -> exists (b' : option SeqBB.t) (s2' : state), star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBop None op args res0 :: b)) /\ match_states b' (RTL.State s f sp pc' rs # res0 <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (op : Op.operation) (args : list reg) (res0 : reg) (pc' : RTL.node) (v : val) (stk' : list stackframe) (tf : function) (pc1 : RTL.node) (rs1 : RTL.regset) (m1 : mem) (b : list instr) (x : SeqBB.t), (RTL.fn_code f) ! pc = Some (RTL.Iop op args res0 pc') -> Op.eval_operation ge sp op rs ## args m = Some v -> transl_function f = OK tf -> (forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0) -> Forall2 match_stackframe s stk' -> star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m) -> sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res0 :: b) -> (fn_code tf) ! pc1 = Some x -> match_block (RTL.fn_code f) (fn_code tf) pc' b -> exists (b' : option SeqBB.t) (s2' : state), star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBop None op args res0 :: b)) /\ match_states b' (RTL.State s f sp pc' rs # res0 <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bexists (b' : option SeqBB.t) (s2' : state), star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBop None op args res :: b)) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bstar step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bltof (option SeqBB.t) measure ?b' (Some (RBop None op args res :: b)) /\ match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bltof (option SeqBB.t) measure ?b' (Some (RBop None op args res :: b)) /\ match_states ?b' (RTL.State s f sp pc' rs # res <- v m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bltof (option SeqBB.t) measure ?b' (Some (RBop None op args res :: b))prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bmatch_states ?b' (RTL.State s f sp pc' rs # res <- v m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bmatch_states (Some b) (RTL.State s f sp pc' rs # res <- v m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bexists b' : SeqBB.t, (fn_code tf) ! pc1 = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bstar RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc' rs # res <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bsem_extrap tf pc1 sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bstar RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc' rs # res <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bsem_extrap tf pc1 sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bRTL.step ge (RTL.State s f sp pc rs m) ?t2 (RTL.State s f sp pc' rs # res <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bE0 = E0 ** ?t2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bsem_extrap tf pc1 sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bE0 = E0 ** E0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bsem_extrap tf pc1 sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bsem_extrap tf pc1 sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: b) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' bforall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) b out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
b: list instr
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: b) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' b
out_s: istate
block2: SeqBB.t
H: SeqBB.step tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) b out_s
H0: (fn_code tf) ! pc1 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H3: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H3: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res) (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec ?state') (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H3: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)Op.eval_operation tge sp op rs ## args m = Some ?vprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs # res <- ?v; is_ps := PMap.init false; is_mem := m |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H3: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H3: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H3: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H2: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H4: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H3: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)inv MATCHB2; inv H3. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
IOP: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
EVAL: Op.eval_operation ge sp op rs ## args m = Some v
TR: transl_function f = OK tf
MATCHB: forall (pc0 : positive) (b0 : SeqBB.t), (fn_code tf) ! pc0 = Some b0 -> match_block (RTL.fn_code f) (fn_code tf) pc0 b0
STK: Forall2 match_stackframe s stk'
STAR: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
i: instr
instrs: list instr
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
INCODE: (fn_code tf) ! pc1 = Some x
MATCHB2: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
block2: SeqBB.t
H0: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H3: step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (op : Op.operation) (args : list reg) (res0 : reg) (pc' : RTL.node) (v : val) (stk' : list stackframe) (tf : function) (pc1 : RTL.node) (rs1 : RTL.regset) (m1 : mem) (x : SeqBB.t), (RTL.fn_code f) ! pc = Some (RTL.Iop op args res0 pc') -> Op.eval_operation ge sp op rs ## args m = Some v -> transl_function f = OK tf -> (forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b) -> Forall2 match_stackframe s stk' -> star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m) -> sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res0 :: RBexit None (RBgoto pc') :: nil) -> (fn_code tf) ! pc1 = Some x -> valid_succ (fn_code tf) pc' -> exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # res0 <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (op : Op.operation) (args : list reg) (res0 : reg) (pc' : RTL.node) (v : val) (stk' : list stackframe) (tf : function) (pc1 : RTL.node) (rs1 : RTL.regset) (m1 : mem) (x : SeqBB.t), (RTL.fn_code f) ! pc = Some (RTL.Iop op args res0 pc') -> Op.eval_operation ge sp op rs ## args m = Some v -> transl_function f = OK tf -> (forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b) -> Forall2 match_stackframe s stk' -> star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m) -> sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res0 :: RBexit None (RBgoto pc') :: nil) -> (fn_code tf) ! pc1 = Some x -> valid_succ (fn_code tf) pc' -> exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # res0 <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H7: valid_succ (fn_code tf) pc'exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H7: valid_succ (fn_code tf) pc'
H2: Op.eval_operation ge sp op rs ## args m = Some vexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H7: valid_succ (fn_code tf) pc'
H2: Op.eval_operation ge sp op rs ## args m = Some vexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some ?bbprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) ?bb (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBop None op args res) (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0Op.eval_operation tge sp op rs ## args m = Some ?vprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs # res <- ?v; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc')) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (is_ps {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs # res <- v (PMap.init false) m) (RBgoto pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs # res <- v (PMap.init false) m) (RBgoto pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # res <- v m) (State stk' tf sp pc' rs # res <- v (PMap.init false) m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists b' : SeqBB.t, (fn_code tf) ! pc' = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' rs # res <- v m) E0 (RTL.State s f sp pc' rs # res <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' rs # res <- v m) E0 (RTL.State s f sp pc' rs # res <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) x0 out_s -> (fn_code tf) ! pc' = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H1: SeqBB.step tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H4: (fn_code tf) ! pc' = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) block2 out_scrush. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
stk': list stackframe
tf: function
pc1: RTL.node
rs1: RTL.regset
m1: mem
x: SeqBB.t
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
TF: transl_function f = OK tf
CODE: forall (pc0 : positive) (b : SeqBB.t), (fn_code tf) ! pc0 = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc0 b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
H3: (fn_code tf) ! pc1 = Some x
H2: Op.eval_operation ge sp op rs ## args m = Some v
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H1: SeqBB.step tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H4: Some x0 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs # res <- v; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (op : Op.operation) (args : list reg) (res : reg) (pc' : RTL.node) (v : val), (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc') -> Op.eval_operation ge sp op rs ## args m = Some v -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (op : Op.operation) (args : list reg) (res : reg) (pc' : RTL.node) (v : val), (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc') -> Op.eval_operation ge sp op rs ## args m = Some v -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some vforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H1: match_states (Some (RBop None op args res :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc' b
H2: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBop None op args res :: b))) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBop None op args res :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) pc'
H2: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBop None op args res :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'apply sim_star; eapply transl_Iop_correct_nj; eassumption.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H1: match_states (Some (RBop None op args res :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: b)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc' b
H2: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBop None op args res :: b))) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBop None op args res :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) pc'
H2: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBop None op args res :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBop None op args res :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) pc'
H2: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBop None op args res :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'eapply transl_Iop_correct_j; eassumption. } Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBop None op args res :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBop None op args res :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) pc'
H2: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (chunk : memory_chunk) (addr : Op.addressing) (args : list reg) (dst : reg) (pc' : RTL.node) (a v : val), (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc') -> Op.eval_addressing ge sp addr rs ## args = Some a -> Mem.loadv chunk m a = Some v -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (chunk : memory_chunk) (addr : Op.addressing) (args : list reg) (dst : reg) (pc' : RTL.node) (a v : val), (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc') -> Op.eval_addressing ge sp addr rs ## args = Some a -> Mem.loadv chunk m a = Some v -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some vforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBload None chunk addr args dst :: b))) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBload None chunk addr args dst :: b))) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ ltof (option SeqBB.t) measure b' (Some (RBload None chunk addr args dst :: b)) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hstar step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBload None chunk addr args dst :: b)) /\ match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBload None chunk addr args dst :: b)) /\ match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBload None chunk addr args dst :: b))prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hmatch_states ?b' (RTL.State s f sp pc' rs # dst <- v m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hmatch_states (Some b) (RTL.State s f sp pc' rs # dst <- v m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hexists b' : SeqBB.t, (fn_code tf) ! pc1 = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hstar RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc' rs # dst <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hstar RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc' rs # dst <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt HRTL.step ge (RTL.State s f sp pc rs m) ?t2 (RTL.State s f sp pc' rs # dst <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt HE0 = E0 ** ?t2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt HE0 = E0 ** E0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: b) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hforall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) b out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBload None chunk addr args dst :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: b) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) b out_s
H7: (fn_code tf) ! pc1 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst) (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec ?state') (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)Op.eval_addressing tge sp addr rs ## args = Some aprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)inv H6; inv H10.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBload None chunk addr args dst :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some aexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some aexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some ?bbprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) ?bb (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBload None chunk addr args dst) (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0Op.eval_addressing tge sp addr rs ## args = Some aprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBgoto pc')) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (is_ps {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs # dst <- v (PMap.init false) m) (RBgoto pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs # dst <- v (PMap.init false) m) (RBgoto pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs # dst <- v m) (State stk' tf sp pc' rs # dst <- v (PMap.init false) m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists b' : SeqBB.t, (fn_code tf) ! pc' = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' rs # dst <- v m) E0 (RTL.State s f sp pc' rs # dst <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' rs # dst <- v m) E0 (RTL.State s f sp pc' rs # dst <- v m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) x0 out_s -> (fn_code tf) ! pc' = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H6: (fn_code tf) ! pc' = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) block2 out_scrush. } Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H1: Mem.loadv chunk m a = Some v
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBload None chunk addr args dst :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H6: Some x0 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs # dst <- v; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (chunk : memory_chunk) (addr : Op.addressing) (args : list reg) (src : reg) (pc' : RTL.node) (a : val) (m' : mem), (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc') -> Op.eval_addressing ge sp addr rs ## args = Some a -> Mem.storev chunk m a rs # src = Some m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (chunk : memory_chunk) (addr : Op.addressing) (args : list reg) (src : reg) (pc' : RTL.node) (a : val) (m' : mem), (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc') -> Op.eval_addressing ge sp addr rs ## args = Some a -> Mem.storev chunk m a rs # src = Some m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBstore None chunk addr args src :: b))) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBstore None chunk addr args src :: b))) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ ltof (option SeqBB.t) measure b' (Some (RBstore None chunk addr args src :: b)) /\ match_states b' (RTL.State s f sp pc' rs m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hstar step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBstore None chunk addr args src :: b)) /\ match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBstore None chunk addr args src :: b)) /\ match_states ?b' (RTL.State s f sp pc' rs m') (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hltof (option SeqBB.t) measure ?b' (Some (RBstore None chunk addr args src :: b))prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hmatch_states ?b' (RTL.State s f sp pc' rs m') (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hmatch_states (Some b) (RTL.State s f sp pc' rs m') (State stk' tf sp pc1 rs1 (PMap.init false) m1)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hexists b' : SeqBB.t, (fn_code tf) ! pc1 = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hstar RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc' rs m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hstar RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc' rs m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt HRTL.step ge (RTL.State s f sp pc rs m) ?t2 (RTL.State s f sp pc' rs m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt HE0 = E0 ** ?t2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt HE0 = E0 ** E0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: b)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hsem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: b) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hforall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) b out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
b: SeqBB.t
H2: match_states (Some (RBstore None chunk addr args src :: b)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: b) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' b
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) b out_s
H7: (fn_code tf) ! pc1 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src) (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec ?state') (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)Op.eval_addressing tge sp addr rs ## args = Some aprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (i :: instrs) (Iterm state'' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state', state'': instr_state
cf: cf_instr
H9: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iexec state')
H11: step_list (step_instr tge) sp (Iexec state') instrs (Iterm state'' cf)(fn_code tf) ! pc1 = Some block2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)inv H6; inv H10.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
i: instr
instrs: list instr
H2: match_states (Some (RBstore None chunk addr args src :: i :: instrs)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: i :: instrs) out_s -> (fn_code tf) ! pc1 = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 out_s
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: match_block (RTL.fn_code f) (fn_code tf) pc' (i :: instrs)
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
block2: SeqBB.t
H7: (fn_code tf) ! pc1 = Some block2
state': instr_state
cf: cf_instr
H10: step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) i (Iterm state' cf)SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) block2 (Iterm state' cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some aexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some aexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some ?bbprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) ?bb (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBstore None chunk addr args src) (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0Op.eval_addressing tge sp addr rs ## args = Some aprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (PMap.init false) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (RBexit None (RBgoto pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (RBexit None (RBgoto pc')) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0truthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m') (RBgoto pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m') (RBgoto pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m') (State stk' tf sp pc' rs (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists b' : SeqBB.t, (fn_code tf) ! pc' = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' rs m') E0 (RTL.State s f sp pc' rs m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' rs m') E0 (RTL.State s f sp pc' rs m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) x0 out_s -> (fn_code tf) ! pc' = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) x0 out_s
H6: (fn_code tf) ! pc' = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) block2 out_scrush. } Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H1: Mem.storev chunk m a rs # src = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBstore None chunk addr args src :: RBexit None (RBgoto pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
Learn: Learnt H
H7: Op.eval_addressing ge sp addr rs ## args = Some a
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) x0 out_s
H6: Some x0 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m' |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (v : val) (f : RTL.fundef), Genv.find_funct ge v = Some f -> exists tf : fundef, Genv.find_funct tge v = Some tf /\ transl_fundef f = OK tfprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (v : val) (f : RTL.fundef), Genv.find_funct ge v = Some f -> exists tf : fundef, Genv.find_funct tge v = Some tf /\ transl_fundef f = OK tfprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
v: val
f: RTL.fundef
H: Genv.find_funct ge v = Some fexists tf : fundef, Genv.find_funct tge v = Some tf /\ transl_fundef f = OK tfintros (cu & tf & P & Q & R); exists tf; auto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
v: val
f: RTL.fundef
H: Genv.find_funct ge v = Some f(exists (cunit : AST.program (AST.fundef RTL.function) unit) (tf : AST.fundef function), Genv.find_funct (Genv.globalenv tprog) v = Some tf /\ transl_fundef f = OK tf /\ Linking.linkorder cunit prog) -> exists tf : fundef, Genv.find_funct tge v = Some tf /\ transl_fundef f = OK tfprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (ros : reg + ident) (rs rs' : PMap.t val) (f : RTL.fundef), (forall x : positive, rs # x = rs' # x) -> RTL.find_function ge ros rs = Some f -> exists tf : fundef, find_function tge ros rs' = Some tf /\ transl_fundef f = OK tfprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (ros : reg + ident) (rs rs' : PMap.t val) (f : RTL.fundef), (forall x : positive, rs # x = rs' # x) -> RTL.find_function ge ros rs = Some f -> exists tf : fundef, find_function tge ros rs' = Some tf /\ transl_fundef f = OK tfdestruct ros; simplify; try rewrite <- H; [| rewrite symbols_preserved; destruct_match; try (apply function_ptr_translated); crush ]; intros; repeat ffts. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (ros : reg + ident) (rs rs' : PMap.t val) (f : RTL.fundef), (forall x : positive, rs # x = rs' # x) -> RTL.find_function ge ros rs = Some f -> exists tf : fundef, find_function tge ros rs' = Some tf /\ transl_fundef f = OK tfprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : RTL.regset) (m : mem) (sig : signature) (ros : reg + ident) (args : list reg) (res : reg) (pc' : RTL.node) (fd : RTL.fundef), (RTL.fn_code f) ! pc = Some (RTL.Icall sig ros args res pc') -> RTL.find_function ge ros rs = Some fd -> RTL.funsig fd = sig -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : RTL.regset) (m : mem) (sig : signature) (ros : reg + ident) (args : list reg) (res : reg) (pc' : RTL.node) (fd : RTL.fundef), (RTL.fn_code f) ! pc = Some (RTL.Icall sig ros args res pc') -> RTL.find_function ge ros rs = Some fd -> RTL.funsig fd = sig -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
sig: signature
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall sig ros args res pc')
H0: RTL.find_function ge ros rs = Some fd
H1: RTL.funsig fd = sigforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
H0: RTL.find_function ge ros rs = Some fd
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
H0: RTL.find_function ge ros rs = Some fd
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
H0: RTL.find_function ge ros rs = Some fd
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fdexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) pc'
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fdexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1(fn_code tf) ! pc1 = Some ?bbprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) ?bb (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBcall (RTL.funsig fd) ros args res pc')) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1truthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBcall (RTL.funsig fd) ros args res pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBcall (RTL.funsig fd) ros args res pc') E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1funsig x1 = RTL.funsig fdprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) (Callstate (Stackframe res tf sp pc' rs (PMap.init false) :: stk') x1 rs ## args m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_states ?b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) (Callstate (Stackframe res tf sp pc' rs (PMap.init false) :: stk') x1 rs ## args m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1Forall2 match_stackframe (RTL.Stackframe res f sp pc' rs :: s) (Stackframe res tf sp pc' rs (PMap.init false) :: stk')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1match_stackframe (RTL.Stackframe res f sp pc' rs) (Stackframe res tf sp pc' rs (PMap.init false))prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1Forall2 match_stackframe s stk'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1valid_succ (fn_code tf) pc'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1Forall2 match_stackframe s stk'auto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcall (RTL.funsig fd) ros args res pc') :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icall (RTL.funsig fd) ros args res pc')
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: SeqBB.t
H0: (fn_code tf) ! pc' = Some x0
x1: fundef
H4: find_function tge ros rs = Some x1
H7: transl_fundef fd = OK x1Forall2 match_stackframe s stk'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (stk : block) (pc : positive) (rs : RTL.regset) (m : mem) (sig : signature) (ros : reg + ident) (args : list reg) (fd : RTL.fundef) (m' : mem), (RTL.fn_code f) ! pc = Some (RTL.Itailcall sig ros args) -> RTL.find_function ge ros rs = Some fd -> RTL.funsig fd = sig -> Mem.free m stk 0 (RTL.fn_stacksize f) = Some m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate s fd rs ## args m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (stk : block) (pc : positive) (rs : RTL.regset) (m : mem) (sig : signature) (ros : reg + ident) (args : list reg) (fd : RTL.fundef) (m' : mem), (RTL.fn_code f) ! pc = Some (RTL.Itailcall sig ros args) -> RTL.find_function ge ros rs = Some fd -> RTL.funsig fd = sig -> Mem.free m stk 0 (RTL.fn_stacksize f) = Some m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate s fd rs ## args m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
sig: signature
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall sig ros args)
H0: RTL.find_function ge ros rs = Some fd
H1: RTL.funsig fd = sig
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate s fd rs ## args m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H0: RTL.find_function ge ros rs = Some fd
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some b0) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.Callstate s fd rs ## args m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H0: RTL.find_function ge ros rs = Some fd
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some b0) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.Callstate s fd rs ## args m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H0: RTL.find_function ge ros rs = Some fd
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate s fd rs ## args m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fdexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate s fd rs ## args m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fdexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate s fd rs ## args m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fdexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate s fd rs ## args m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Callstate s fd rs ## args m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0(fn_code tf) ! pc1 = Some ?bbprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) ?bb (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_instr tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_list (step_instr tge) (Vptr stk Integers.Ptrofs.zero) (Iexec ?state') (RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_list (step_instr tge) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_instr tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBtailcall (RTL.funsig fd) ros args)) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0truthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs (PMap.init false) m) (RBtailcall (RTL.funsig fd) ros args) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0step_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs (PMap.init false) m) (RBtailcall (RTL.funsig fd) ros args) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0funsig x0 = RTL.funsig fdprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0Mem.free m stk 0 (fn_stacksize tf) = Some ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') (Callstate stk' x0 rs ## args ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0Mem.free m stk 0 (fn_stacksize tf) = Some ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') (Callstate stk' x0 rs ## args ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0fn_stacksize tf = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0
H5: fn_stacksize tf = RTL.fn_stacksize fMem.free m stk 0 (fn_stacksize tf) = Some ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') (Callstate stk' x0 rs ## args ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0fn_stacksize tf = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: match partition f with | OK f' => if check_valid_node (fn_code f') (RTL.fn_entrypoint f) then if forall_ptree (check_code (RTL.fn_code f) (fn_code f')) (fn_code f') then OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f'; fn_entrypoint := RTL.fn_entrypoint f |} else Error (msg "check_present_blocks failed") else Error (msg "entrypoint does not exists") | Error msg => Error msg end = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0fn_stacksize tf = RTL.fn_stacksize finv TF; auto.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = true
TF: OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |} = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0fn_stacksize tf = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0
H5: fn_stacksize tf = RTL.fn_stacksize fMem.free m stk 0 (fn_stacksize tf) = Some ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') (Callstate stk' x0 rs ## args ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0
H5: fn_stacksize tf = RTL.fn_stacksize fMem.free m stk 0 (RTL.fn_stacksize f) = Some ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') (Callstate stk' x0 rs ## args ?m')econstructor; try eassumption. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H3: match_states (Some (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBtailcall (RTL.funsig fd) ros args) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Itailcall (RTL.funsig fd) ros args)
Learn: Learnt H
H6: RTL.find_function ge ros rs = Some fd
x0: fundef
H0: find_function tge ros rs = Some x0
H7: transl_fundef fd = OK x0match_states ?b' (RTL.Callstate s fd rs ## args m') (Callstate stk' x0 rs ## args m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (ef : external_function) (args : list (builtin_arg reg)) (res : builtin_res reg) (pc' : RTL.node) (vargs : list val) (t : trace) (vres : val) (m' : mem), (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc') -> eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs -> external_call ef ge vargs m t vres m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (ef : external_function) (args : list (builtin_arg reg)) (res : builtin_res reg) (pc' : RTL.node) (vargs : list val) (t : trace) (vres : val) (m' : mem), (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc') -> eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs -> external_call ef ge vargs m t vres m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t s2' /\ ltof (option SeqBB.t) measure b' (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil))) /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t s2 /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t s2 /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some ?bbprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) ?bb (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBbuiltin ef args res pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBbuiltin ef args res pc') :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBbuiltin ef args res pc')) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0truthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBbuiltin ef args res pc') t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBbuiltin ef args res pc') t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0eval_builtin_args tge (fun r : positive => rs # r) sp m args ?vargsprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0external_call ef tge ?vargs m t ?vres ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') (State stk' tf sp pc' (regmap_setres res ?vres rs) (PMap.init false) ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0external_call ef tge vargs m t ?vres ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') (State stk' tf sp pc' (regmap_setres res ?vres rs) (PMap.init false) ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') (State stk' tf sp pc' (regmap_setres res vres rs) (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0exists b' : SeqBB.t, (fn_code tf) ! pc' = Some b' /\ match_block (RTL.fn_code f) (fn_code tf) pc' ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' (regmap_setres res vres rs) m') E0 (RTL.State s f sp pc' (regmap_setres res vres rs) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0star RTL.step ge (RTL.State s f sp pc' (regmap_setres res vres rs) m') E0 (RTL.State s f sp pc' (regmap_setres res vres rs) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0forall (out_s : istate) (block2 : SeqBB.t), SeqBB.step tge sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) x0 out_s -> (fn_code tf) ! pc' = Some block2 -> SeqBB.step tge sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H6: SeqBB.step tge sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) x0 out_s
H7: (fn_code tf) ! pc' = Some block2SeqBB.step tge sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) block2 out_scrush. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBbuiltin ef args res pc') :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H6: SeqBB.step tge sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) x0 out_s
H7: Some x0 = Some block2SeqBB.step tge sp (Iexec {| is_rs := regmap_setres res vres rs; is_ps := PMap.init false; is_mem := m' |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (b : list reg) (a : list val), init_regs a b = RTL.init_regs a binduction b; crush. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (b : list reg) (a : list val), init_regs a b = RTL.init_regs a bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (args : list val) (m : mem) (m' : Mem.mem') (stk : block), Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk) -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (Internal f) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (args : list val) (m : mem) (m' : Mem.mem') (stk : block), Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk) -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (Internal f) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (Internal f) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
tf: AST.fundef function
H0: match_states None (RTL.Callstate s (Internal f) args m) (Callstate cs' tf args m)
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK tf
STK: Forall2 match_stackframe s cs'exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' tf args m) E0 s2' \/ star step tge (Callstate cs' tf args m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
H0: match_states None (RTL.Callstate s (Internal f) args m) (Callstate cs' (Internal x) args m)
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK xexists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' (Internal x) args m) E0 s2' \/ star step tge (Callstate cs' (Internal x) args m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: transl_fundef (Internal f) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' (Internal x) args m) E0 s2' \/ star step tge (Callstate cs' (Internal x) args m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: transl_fundef (Internal f) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' (Internal x) args m) E0 s2' \/ star step tge (Callstate cs' (Internal x) args m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: transl_fundef (Internal f) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
H1: valid_succ (fn_code x) (fn_entrypoint x)exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' (Internal x) args m) E0 s2' \/ star step tge (Callstate cs' (Internal x) args m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: transl_fundef (Internal f) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
H1: exists b : SeqBB.t, (fn_code x) ! (fn_entrypoint x) = Some bexists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' (Internal x) args m) E0 s2' \/ star step tge (Callstate cs' (Internal x) args m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' (Internal x) args m) E0 s2' \/ star step tge (Callstate cs' (Internal x) args m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (Callstate cs' (Internal x) args m) E0 s2 /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0plus step tge (Callstate cs' (Internal x) args m) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0match_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0fn_stacksize x = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_stacksize x = RTL.fn_stacksize fplus step tge (Callstate cs' (Internal x) args m) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0match_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0fn_stacksize x = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: match partition f with | OK f' => if check_valid_node (fn_code f') (RTL.fn_entrypoint f) then if forall_ptree (check_code (RTL.fn_code f) (fn_code f')) (fn_code f') then OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f'; fn_entrypoint := RTL.fn_entrypoint f |} else Error (msg "check_present_blocks failed") else Error (msg "entrypoint does not exists") | Error msg => Error msg end = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0fn_stacksize x = RTL.fn_stacksize finv EQ; auto.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = true
EQ: OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |} = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0fn_stacksize x = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_stacksize x = RTL.fn_stacksize fplus step tge (Callstate cs' (Internal x) args m) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0match_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_stacksize x = RTL.fn_stacksize fstep tge (Callstate cs' (Internal x) args m) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0match_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_stacksize x = RTL.fn_stacksize fMem.alloc m 0 (fn_stacksize x) = (?m', ?stk)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0match_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr ?stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_stacksize x = RTL.fn_stacksize fMem.alloc m 0 (RTL.fn_stacksize f) = (?m', ?stk)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0match_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr ?stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0match_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0fn_entrypoint x = RTL.fn_entrypoint fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint fmatch_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0fn_entrypoint x = RTL.fn_entrypoint fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: match partition f with | OK f' => if check_valid_node (fn_code f') (RTL.fn_entrypoint f) then if forall_ptree (check_code (RTL.fn_code f) (fn_code f')) (fn_code f') then OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f'; fn_entrypoint := RTL.fn_entrypoint f |} else Error (msg "check_present_blocks failed") else Error (msg "entrypoint does not exists") | Error msg => Error msg end = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0fn_entrypoint x = RTL.fn_entrypoint finv EQ; auto.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = true
EQ: OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |} = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0fn_entrypoint x = RTL.fn_entrypoint fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint fmatch_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint ffn_params x = RTL.fn_params fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params fmatch_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint ffn_params x = RTL.fn_params fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: match partition f with | OK f' => if check_valid_node (fn_code f') (RTL.fn_entrypoint f) then if forall_ptree (check_code (RTL.fn_code f) (fn_code f')) (fn_code f') then OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f'; fn_entrypoint := RTL.fn_entrypoint f |} else Error (msg "check_present_blocks failed") else Error (msg "entrypoint does not exists") | Error msg => Error msg end = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint ffn_params x = RTL.fn_params finv EQ; auto.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = true
EQ: OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |} = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint ffn_params x = RTL.fn_params fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: match_code (RTL.fn_code f) (fn_code x)
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params fmatch_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params fmatch_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0match_states ?b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') (State cs' x (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) (PMap.init false) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0exists b' : SeqBB.t, (fn_code x) ! (fn_entrypoint x) = Some b' /\ match_block (RTL.fn_code f) (fn_code x) (RTL.fn_entrypoint f) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) m') E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0sem_extrap x (fn_entrypoint x) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0exists b' : SeqBB.t, (fn_code x) ! (fn_entrypoint x) = Some b' /\ match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) m') E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0sem_extrap x (fn_entrypoint x) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) ?bprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (fn_entrypoint x) (init_regs args (fn_params x)) m') E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0sem_extrap x (fn_entrypoint x) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (init_regs args (fn_params x)) m') E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0sem_extrap x (fn_entrypoint x) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (fn_params x)) m') E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0sem_extrap x (fn_entrypoint x) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0sem_extrap x (fn_entrypoint x) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0sem_extrap x (fn_entrypoint x) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
x0: SeqBB.t
H2: (fn_code x) ! (fn_entrypoint x) = Some x0
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) x0
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) x0 out_s
H6: (fn_code x) ! (fn_entrypoint x) = Some block2SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
block2: SeqBB.t
out_s: istate
H5: SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) block2 out_s
H2: (fn_code x) ! (fn_entrypoint x) = Some block2
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) block2SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := init_regs args (fn_params x); is_ps := PMap.init false; is_mem := m' |}) block2 out_seauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)
cs': list stackframe
x: function
STK: Forall2 match_stackframe s cs'
EQ: transl_function f = OK x
TF: bind (transl_function f) (fun f' : function => OK (Internal f')) = OK (Internal x)
STK0: Forall2 match_stackframe s cs'
H0: forall (pc : positive) (b : SeqBB.t), (fn_code x) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code x) pc b
block2: SeqBB.t
out_s: istate
H5: SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := RTL.init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) block2 out_s
H2: (fn_code x) ! (fn_entrypoint x) = Some block2
H1: fn_entrypoint x = RTL.fn_entrypoint f
H3: fn_params x = RTL.fn_params f
H4: match_block (RTL.fn_code f) (fn_code x) (fn_entrypoint x) block2SeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := init_regs args (RTL.fn_params f); is_ps := PMap.init false; is_mem := m' |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (ef : external_function) (args : list val) (res : val) (t : trace) (m m' : mem), external_call ef ge args m t res m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (External ef) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s res m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (ef : external_function) (args : list val) (res : val) (t : trace) (m m' : mem), external_call ef ge args m t res m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (External ef) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s res m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (External ef) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s res m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'
cs': list stackframe
tf: AST.fundef function
H0: match_states None (RTL.Callstate s (External ef) args m) (Callstate cs' tf args m)
TF: OK (External ef) = OK tf
STK: Forall2 match_stackframe s cs'exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' tf args m) t s2' \/ star step tge (Callstate cs' tf args m) t s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.Returnstate s res m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'
cs': list stackframe
H0: match_states None (RTL.Callstate s (External ef) args m) (Callstate cs' (External ef) args m)
STK: Forall2 match_stackframe s cs'exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Callstate cs' (External ef) args m) t s2' \/ star step tge (Callstate cs' (External ef) args m) t s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.Returnstate s res m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'
cs': list stackframe
H0: match_states None (RTL.Callstate s (External ef) args m) (Callstate cs' (External ef) args m)
STK: Forall2 match_stackframe s cs'exists (b' : option SeqBB.t) (s2 : state), plus step tge (Callstate cs' (External ef) args m) t s2 /\ match_states b' (RTL.Returnstate s res m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'
cs': list stackframe
H0: match_states None (RTL.Callstate s (External ef) args m) (Callstate cs' (External ef) args m)
STK: Forall2 match_stackframe s cs'plus step tge (Callstate cs' (External ef) args m) t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'
cs': list stackframe
H0: match_states None (RTL.Callstate s (External ef) args m) (Callstate cs' (External ef) args m)
STK: Forall2 match_stackframe s cs'match_states ?b' (RTL.Returnstate s res m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'
cs': list stackframe
H0: match_states None (RTL.Callstate s (External ef) args m) (Callstate cs' (External ef) args m)
STK: Forall2 match_stackframe s cs'step tge (Callstate cs' (External ef) args m) t ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'
cs': list stackframe
H0: match_states None (RTL.Callstate s (External ef) args m) (Callstate cs' (External ef) args m)
STK: Forall2 match_stackframe s cs'match_states ?b' (RTL.Returnstate s res m') ?s2econstructor; eauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'
cs': list stackframe
H0: match_states None (RTL.Callstate s (External ef) args m) (Callstate cs' (External ef) args m)
STK: Forall2 match_stackframe s cs'match_states ?b' (RTL.Returnstate s res m') (Returnstate cs' res m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (res : reg) (f : RTL.function) (sp : val) (pc : RTL.node) (rs : RTL.regset) (s : list RTL.stackframe) (vres : val) (m : mem) (b : option SeqBB.t) (s2 : state), match_states b (RTL.Returnstate (RTL.Stackframe res f sp pc rs :: s) vres m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (res : reg) (f : RTL.function) (sp : val) (pc : RTL.node) (rs : RTL.regset) (s : list RTL.stackframe) (vres : val) (m : mem) (b : option SeqBB.t) (s2 : state), match_states b (RTL.Returnstate (RTL.Stackframe res f sp pc rs :: s) vres m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
b: option SeqBB.t
s2: state
H: match_states b (RTL.Returnstate (RTL.Stackframe res f sp pc rs :: s) vres m) s2exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
cs': list stackframe
STK: Forall2 match_stackframe (RTL.Stackframe res f sp pc rs :: s) cs'exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Returnstate cs' vres m) E0 s2' \/ star step tge (Returnstate cs' vres m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
y: stackframe
l': list stackframe
H1: match_stackframe (RTL.Stackframe res f sp pc rs) y
H3: Forall2 match_stackframe s l'exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Returnstate (y :: l') vres m) E0 s2' \/ star step tge (Returnstate (y :: l') vres m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
VALID: valid_succ (fn_code tf) pcexists (b' : option SeqBB.t) (s2' : state), (plus step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' \/ star step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
VALID: valid_succ (fn_code tf) pc
H: match_code (RTL.fn_code f) (fn_code tf)exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' \/ star step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
VALID: exists b : SeqBB.t, (fn_code tf) ! pc = Some b
H: match_code (RTL.fn_code f) (fn_code tf)exists (b' : option SeqBB.t) (s2' : state), (plus step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' \/ star step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: match_code (RTL.fn_code f) (fn_code tf)
x: SeqBB.t
H0: (fn_code tf) ! pc = Some xexists (b' : option SeqBB.t) (s2' : state), (plus step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' \/ star step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some xexists (b' : option SeqBB.t) (s2' : state), (plus step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' \/ star step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc xexists (b' : option SeqBB.t) (s2' : state), (plus step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' \/ star step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2' /\ ltof (option SeqBB.t) measure b' None) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc xexists (b' : option SeqBB.t) (s2 : state), plus step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 s2 /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc xplus step tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc xmatch_states ?b' (RTL.State s f sp pc rs # res <- vres m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc xstep tge (Returnstate (Stackframe res tf sp pc rs (PMap.init false) :: l') vres m) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc xmatch_states ?b' (RTL.State s f sp pc rs # res <- vres m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc xmatch_states ?b' (RTL.State s f sp pc rs # res <- vres m) (State l' tf sp pc rs # res <- vres (PMap.init false) m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc xsem_extrap tf pc sp (Iexec {| is_rs := rs # res <- vres; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs # res <- vres; is_ps := PMap.init false; is_mem := m |}) xsetoid_rewrite H0 in H4; crush. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: mem
l': list stackframe
H3: Forall2 match_stackframe s l'
tf: function
TF: transl_function f = OK tf
H: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
x: SeqBB.t
H0: (fn_code tf) ! pc = Some x
H1: match_block (RTL.fn_code f) (fn_code tf) pc x
out_s: istate
block2: SeqBB.t
H2: SeqBB.step tge sp (Iexec {| is_rs := rs # res <- vres; is_ps := PMap.init false; is_mem := m |}) x out_s
H4: (fn_code tf) ! pc = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs # res <- vres; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (cond : Op.condition) (args : list reg) (ifso ifnot : RTL.node) (b : bool) (pc' : RTL.node), (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot) -> Op.eval_condition cond rs ## args m = Some b -> pc' = (if b then ifso else ifnot) -> forall (b0 : option SeqBB.t) (s2 : state), match_states b0 (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b0) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (cond : Op.condition) (args : list reg) (ifso ifnot : RTL.node) (b : bool) (pc' : RTL.node), (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot) -> Op.eval_condition cond rs ## args m = Some b -> pc' = (if b then ifso else ifnot) -> forall (b0 : option SeqBB.t) (s2 : state), match_states b0 (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b0) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
H0: Op.eval_condition cond rs ## args m = Some b
H1: pc' = (if b then ifso else ifnot)forall (b0 : option SeqBB.t) (s2 : state), match_states b0 (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b0) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
H0: Op.eval_condition cond rs ## args m = Some b
b1: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b1) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b1
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc b1exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b1)) /\ match_states b' (RTL.State s f sp (if b then ifso else ifnot) rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
H0: Op.eval_condition cond rs ## args m = Some b
b1: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b1) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b1
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc b1exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b1)) /\ match_states b' (RTL.State s f sp (if b then ifso else ifnot) rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
H0: Op.eval_condition cond rs ## args m = Some b
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) ifso
H6: valid_succ (fn_code tf) ifnot
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp (if b then ifso else ifnot) rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) ifso
H6: valid_succ (fn_code tf) ifnot
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some bexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp (if b then ifso else ifnot) rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H5: valid_succ (fn_code tf) ifso
H6: valid_succ (fn_code tf) ifnot
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some bexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp (if b then ifso else ifnot) rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some b
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp (if b then ifso else ifnot) rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp ifso rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp ifnot rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp ifso rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBcond cond args ifso ifnot) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBcond cond args ifso ifnot) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBcond cond args ifso ifnot)) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1truthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBcond cond args ifso ifnot) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBcond cond args ifso ifnot) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBcond cond args ifso ifnot) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifso rs m) (State stk' tf sp ifso rs (PMap.init false) m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1sem_extrap tf ifso sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x1prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x1 out_s
H6: (fn_code tf) ! ifso = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x1 out_s
H6: Some x1 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sauto.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some true
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
block2: SeqBB.t
out_s: istate
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_s
H4: (fn_code tf) ! ifso = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp ifnot rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp ifnot rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBcond cond args ifso ifnot) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBcond cond args ifso ifnot) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBcond cond args ifso ifnot)) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1truthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBcond cond args ifso ifnot) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBcond cond args ifso ifnot) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBcond cond args ifso ifnot) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1match_states ?b' (RTL.State s f sp ifnot rs m) (State stk' tf sp ifnot rs (PMap.init false) m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1sem_extrap tf ifnot sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H6: (fn_code tf) ! ifnot = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
x0: SeqBB.t
H0: (fn_code tf) ! ifnot = Some x0
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1
out_s: istate
block2: SeqBB.t
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H6: Some x0 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sauto. } Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBcond cond args ifso ifnot) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H1: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
Learn: Learnt H
H7: Op.eval_condition cond rs ## args m = Some false
block2: SeqBB.t
out_s: istate
H5: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_s
H0: (fn_code tf) ! ifnot = Some block2
x1: SeqBB.t
H4: (fn_code tf) ! ifso = Some x1SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (arg : reg) (tbl : list RTL.node) (n : Integers.Int.int) (pc' : RTL.node), (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl) -> rs # arg = Vint n -> list_nth_z tbl (Integers.Int.unsigned n) = Some pc' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (sp : val) (pc : positive) (rs : Regmap.t val) (m : mem) (arg : reg) (tbl : list RTL.node) (n : Integers.Int.int) (pc' : RTL.node), (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl) -> rs # arg = Vint n -> list_nth_z tbl (Integers.Int.unsigned n) = Some pc' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some b0) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H5: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: Forall (valid_succ (fn_code tf)) tbl
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H6: valid_succ (fn_code tf) pc'
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0exists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.State s f sp pc' rs m) s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0plus step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step tge (State stk' tf sp pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec ?state') (RBexit None (RBjumptable arg tbl) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_list (step_instr tge) sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBjumptable arg tbl) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_instr tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBjumptable arg tbl)) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0truthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBjumptable arg tbl) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBjumptable arg tbl) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0step_cf_instr tge (State stk' tf sp pc1 rs (PMap.init false) m) (RBjumptable arg tbl) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0match_states ?b' (RTL.State s f sp pc' rs m) (State stk' tf sp pc' rs (PMap.init false) m)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0sem_extrap tf pc' sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H6: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H7: (fn_code tf) ! pc' = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
x0: SeqBB.t
H5: (fn_code tf) ! pc' = Some x0
out_s: istate
block2: SeqBB.t
H6: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) x0 out_s
H7: Some x0 = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H2: match_states (Some (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)) (RTL.State s f sp pc rs m) (State stk' tf sp pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f sp pc1 rs1 m1) E0 (RTL.State s f sp pc rs m)
BB: sem_extrap tf pc1 sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBjumptable arg tbl) :: nil)
x: SeqBB.t
H4: (fn_code tf) ! pc1 = Some x
H3: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
Learn: Learnt H
block2: SeqBB.t
out_s: istate
H6: SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_s
H5: (fn_code tf) ! pc' = Some block2SeqBB.step tge sp (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) block2 out_sprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (stk : block) (pc : positive) (rs : RTL.regset) (m : mem) (or0 : option reg) (m' : mem), (RTL.fn_code f) ! pc = Some (RTL.Ireturn or0) -> Mem.free m stk 0 (RTL.fn_stacksize f) = Some m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s (regmap_optget or0 Vundef rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s : list RTL.stackframe) (f : RTL.function) (stk : block) (pc : positive) (rs : RTL.regset) (m : mem) (or0 : option reg) (m' : mem), (RTL.fn_code f) ! pc = Some (RTL.Ireturn or0) -> Mem.free m stk 0 (RTL.fn_stacksize f) = Some m' -> forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s (regmap_optget or0 Vundef rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some b0) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: match_code (RTL.fn_code f) (fn_code tf)
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
b0: SeqBB.t
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some b0) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) b0
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H4: match_block (RTL.fn_code f) (fn_code tf) pc b0exists (b' : option SeqBB.t) (s2' : state), (plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2' \/ star step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2' /\ ltof (option SeqBB.t) measure b' (Some b0)) /\ match_states b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt Hexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt Hfn_stacksize tf = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt Hfn_stacksize tf = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: match partition f with | OK f' => if check_valid_node (fn_code f') (RTL.fn_entrypoint f) then if forall_ptree (check_code (RTL.fn_code f) (fn_code f')) (fn_code f') then OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f'; fn_entrypoint := RTL.fn_entrypoint f |} else Error (msg "check_present_blocks failed") else Error (msg "entrypoint does not exists") | Error msg => Error msg end = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt Hfn_stacksize tf = RTL.fn_stacksize finv TF; auto.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
f0: function
Heqr: partition f = OK f0
Heqb: check_valid_node (fn_code f0) (RTL.fn_entrypoint f) = true
Heqb0: forall_ptree (check_code (RTL.fn_code f) (fn_code f0)) (fn_code f0) = true
TF: OK {| fn_sig := RTL.fn_sig f; fn_params := RTL.fn_params f; fn_stacksize := RTL.fn_stacksize f; fn_code := fn_code f0; fn_entrypoint := RTL.fn_entrypoint f |} = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt Hfn_stacksize tf = RTL.fn_stacksize fprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fexists (b' : option SeqBB.t) (s2 : state), plus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 s2 /\ match_states b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fplus step tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fSeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) x (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fSeqBB.step tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBnop :: RBexit None (RBreturn or) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize f(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_instr tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) RBnop (Iexec ?state')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_list (step_instr tge) (Vptr stk Integers.Ptrofs.zero) (Iexec ?state') (RBexit None (RBreturn or) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize f(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_list (step_instr tge) (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBreturn or) :: nil) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize f(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_instr tge (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (RBexit None (RBreturn or)) (Iterm {| is_rs := ?rs'; is_ps := ?pr'; is_mem := ?m' |} ?cf)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize f(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 ?rs' ?pr' ?m') ?cf E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize ftruthy (is_ps {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) Noneprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize f(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs (PMap.init false) m) (RBreturn or) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize f(fn_code tf) ! pc1 = Some xprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs (PMap.init false) m) (RBreturn or) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fstep_cf_instr tge (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs (PMap.init false) m) (RBreturn or) E0 ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') ?s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fMem.free m stk 0 (fn_stacksize tf) = Some ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') (Returnstate stk' (regmap_optget or Vundef rs) ?m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fMem.free m stk 0 (RTL.fn_stacksize f) = Some ?m'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') (Returnstate stk' (regmap_optget or Vundef rs) ?m')constructor; eauto. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'
stk': list stackframe
tf: function
pc1: positive
rs1: RTL.regset
m1: mem
H1: match_states (Some (RBnop :: RBexit None (RBreturn or) :: nil)) (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) (State stk' tf (Vptr stk Integers.Ptrofs.zero) pc1 rs1 (PMap.init false) m1)
TF: transl_function f = OK tf
CODE: forall (pc : positive) (b : SeqBB.t), (fn_code tf) ! pc = Some b -> match_block (RTL.fn_code f) (fn_code tf) pc b
STK: Forall2 match_stackframe s stk'
STARSIMU: star RTL.step ge (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc1 rs1 m1) E0 (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m)
BB: sem_extrap tf pc1 (Vptr stk Integers.Ptrofs.zero) (Iexec {| is_rs := rs; is_ps := PMap.init false; is_mem := m |}) (Iexec {| is_rs := rs1; is_ps := PMap.init false; is_mem := m1 |}) (RBnop :: RBexit None (RBreturn or) :: nil)
x: SeqBB.t
H3: (fn_code tf) ! pc1 = Some x
H2: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
Learn: Learnt H
H4: fn_stacksize tf = RTL.fn_stacksize fmatch_states ?b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') (Returnstate stk' (regmap_optget or Vundef rs) m')prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : RTL.state) (t : trace) (s1' : RTL.state), RTL.step ge s1 t s1' -> forall (b : option SeqBB.t) (s2 : state), match_states b s1 s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' s1' s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : RTL.state) (t : trace) (s1' : RTL.state), RTL.step ge s1 t s1' -> forall (b : option SeqBB.t) (s2 : state), match_states b s1 s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' s1' s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some vforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some vforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
sig: signature
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall sig ros args res pc')
H0: RTL.find_function ge ros rs = Some fd
H1: RTL.funsig fd = sigforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
sig: signature
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall sig ros args)
H0: RTL.find_function ge ros rs = Some fd
H1: RTL.funsig fd = sig
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate s fd rs ## args m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
H0: Op.eval_condition cond rs ## args m = Some b
H1: pc' = (if b then ifso else ifnot)forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (Internal f) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (External ef) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s res m') s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: memforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Returnstate (RTL.Stackframe res f sp pc rs :: s) vres m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'eauto using transl_Inop_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Inop pc')forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'eauto using transl_Iop_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
op: Op.operation
args: list reg
res: reg
pc': RTL.node
v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iop op args res pc')
H0: Op.eval_operation ge sp op rs ## args m = Some vforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # res <- v m) s2'eauto using transl_Iload_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
dst: reg
pc': RTL.node
a, v: val
H: (RTL.fn_code f) ! pc = Some (RTL.Iload chunk addr args dst pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.loadv chunk m a = Some vforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs # dst <- v m) s2'eauto using transl_Istore_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
chunk: memory_chunk
addr: Op.addressing
args: list reg
src: reg
pc': RTL.node
a: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Istore chunk addr args src pc')
H0: Op.eval_addressing ge sp addr rs ## args = Some a
H1: Mem.storev chunk m a rs # src = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m') s2'eauto using transl_Icall_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: RTL.regset
m: mem
sig: signature
ros: (reg + ident)%type
args: list reg
res: reg
pc': RTL.node
fd: RTL.fundef
H: (RTL.fn_code f) ! pc = Some (RTL.Icall sig ros args res pc')
H0: RTL.find_function ge ros rs = Some fd
H1: RTL.funsig fd = sigforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate (RTL.Stackframe res f sp pc' rs :: s) fd rs ## args m) s2'eauto using transl_Itailcall_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
sig: signature
ros: (reg + ident)%type
args: list reg
fd: RTL.fundef
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Itailcall sig ros args)
H0: RTL.find_function ge ros rs = Some fd
H1: RTL.funsig fd = sig
H2: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Callstate s fd rs ## args m') s2'eauto using transl_Ibuiltin_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
ef: external_function
args: list (builtin_arg reg)
res: builtin_res reg
pc': RTL.node
vargs: list val
t: trace
vres: val
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ibuiltin ef args res pc')
H0: eval_builtin_args ge (fun r : positive => rs # r) sp m args vargs
H1: external_call ef ge vargs m t vres m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' (regmap_setres res vres rs) m') s2'eauto using transl_Icond_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
cond: Op.condition
args: list reg
ifso, ifnot: RTL.node
b: bool
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Icond cond args ifso ifnot)
H0: Op.eval_condition cond rs ## args m = Some b
H1: pc' = (if b then ifso else ifnot)forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'eauto using transl_Ijumptable_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
sp: val
pc: positive
rs: Regmap.t val
m: mem
arg: reg
tbl: list RTL.node
n: Integers.Int.int
pc': RTL.node
H: (RTL.fn_code f) ! pc = Some (RTL.Ijumptable arg tbl)
H0: rs # arg = Vint n
H1: list_nth_z tbl (Integers.Int.unsigned n) = Some pc'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f sp pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc' rs m) s2'eauto using transl_Ireturn_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
stk: block
pc: positive
rs: RTL.regset
m: mem
or: option reg
m': mem
H: (RTL.fn_code f) ! pc = Some (RTL.Ireturn or)
H0: Mem.free m stk 0 (RTL.fn_stacksize f) = Some m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.State s f (Vptr stk Integers.Ptrofs.zero) pc rs m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s (regmap_optget or Vundef rs) m') s2'eauto using transl_initcall_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
f: RTL.function
args: list val
m: mem
m': Mem.mem'
stk: block
H: Mem.alloc m 0 (RTL.fn_stacksize f) = (m', stk)forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (Internal f) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f (Vptr stk Integers.Ptrofs.zero) (RTL.fn_entrypoint f) (RTL.init_regs args (RTL.fn_params f)) m') s2'eauto using transl_externalcall_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
s: list RTL.stackframe
ef: external_function
args: list val
res: val
t: trace
m, m': mem
H: external_call ef ge args m t res m'forall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Callstate s (External ef) args m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 t s2' \/ star step tge s2 t s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.Returnstate s res m') s2'eauto using transl_returnstate_correct. Qed.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprog
res: reg
f: RTL.function
sp: val
pc: RTL.node
rs: RTL.regset
s: list RTL.stackframe
vres: val
m: memforall (b : option SeqBB.t) (s2 : state), match_states b (RTL.Returnstate (RTL.Stackframe res f sp pc rs :: s) vres m) s2 -> exists (b' : option SeqBB.t) (s2' : state), (plus step tge s2 E0 s2' \/ star step tge s2 E0 s2' /\ ltof (option SeqBB.t) measure b' b) /\ match_states b' (RTL.State s f sp pc rs # res <- vres m) s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforward_simulation (RTL.semantics prog) (semantics tprog)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforward_simulation (RTL.semantics prog) (semantics tprog)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogfsim_properties (RTL.semantics prog) (semantics tprog) (option SeqBB.t) (ltof (option SeqBB.t) measure) match_statesprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogwell_founded (ltof (option SeqBB.t) measure)prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall s1 : Smallstep.state (RTL.semantics prog), Smallstep.initial_state (RTL.semantics prog) s1 -> exists (i : option SeqBB.t) (s2 : Smallstep.state (semantics tprog)), Smallstep.initial_state (semantics tprog) s2 /\ match_states i s1 s2prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (i : option SeqBB.t) (s1 : Smallstep.state (RTL.semantics prog)) (s2 : Smallstep.state (semantics tprog)) (r : Integers.Int.int), match_states i s1 s2 -> Smallstep.final_state (RTL.semantics prog) s1 r -> Smallstep.final_state (semantics tprog) s2 rprog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : Smallstep.state (RTL.semantics prog)) (t : trace) (s1' : Smallstep.state (RTL.semantics prog)), Step (RTL.semantics prog) s1 t s1' -> forall (i : option SeqBB.t) (s2 : Smallstep.state (semantics tprog)), match_states i s1 s2 -> exists (i' : option SeqBB.t) (s2' : Smallstep.state (semantics tprog)), (Plus (semantics tprog) s2 t s2' \/ Star (semantics tprog) s2 t s2' /\ ltof (option SeqBB.t) measure i' i) /\ match_states i' s1' s2'prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall id : ident, Senv.public_symbol (symbolenv (semantics tprog)) id = Senv.public_symbol (symbolenv (RTL.semantics prog)) idapply well_founded_ltof.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogwell_founded (ltof (option SeqBB.t) measure)eauto using transl_initial_states.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall s1 : Smallstep.state (RTL.semantics prog), Smallstep.initial_state (RTL.semantics prog) s1 -> exists (i : option SeqBB.t) (s2 : Smallstep.state (semantics tprog)), Smallstep.initial_state (semantics tprog) s2 /\ match_states i s1 s2intros; eapply transl_final_states; eauto.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (i : option SeqBB.t) (s1 : Smallstep.state (RTL.semantics prog)) (s2 : Smallstep.state (semantics tprog)) (r : Integers.Int.int), match_states i s1 s2 -> Smallstep.final_state (RTL.semantics prog) s1 r -> Smallstep.final_state (semantics tprog) s2 reapply transl_correct.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall (s1 : Smallstep.state (RTL.semantics prog)) (t : trace) (s1' : Smallstep.state (RTL.semantics prog)), Step (RTL.semantics prog) s1 t s1' -> forall (i : option SeqBB.t) (s2 : Smallstep.state (semantics tprog)), match_states i s1 s2 -> exists (i' : option SeqBB.t) (s2' : Smallstep.state (semantics tprog)), (Plus (semantics tprog) s2 t s2' \/ Star (semantics tprog) s2 t s2' /\ ltof (option SeqBB.t) measure i' i) /\ match_states i' s1' s2'apply senv_preserved. Qed. End CORRECTNESS.prog: RTL.program
tprog: program
ge:= Genv.globalenv prog: RTL.genv
tge:= Genv.globalenv tprog: genv
TRANSL: match_prog prog tprogforall id : ident, Senv.public_symbol (symbolenv (semantics tprog)) id = Senv.public_symbol (symbolenv (RTL.semantics prog)) id