aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--x86/ConstpropOp.vp10
-rw-r--r--x86/ConstpropOpproof.v15
2 files changed, 15 insertions, 10 deletions
diff --git a/x86/ConstpropOp.vp b/x86/ConstpropOp.vp
index be0cc09a..59719cf6 100644
--- a/x86/ConstpropOp.vp
+++ b/x86/ConstpropOp.vp
@@ -192,11 +192,11 @@ Nondetfunction addr_strength_reduction_64
Definition addr_strength_reduction
(addr: addressing) (args: list reg) (vl: list aval) :=
- if Archi.ptr64 then
- let addr_args' := addr_strength_reduction_64 addr args vl in
- if addressing_valid (fst addr_args') then addr_args' else (addr, args)
- else
- addr_strength_reduction_32 addr args vl.
+ let addr_args' :=
+ if Archi.ptr64
+ then addr_strength_reduction_64 addr args vl
+ else addr_strength_reduction_32 addr args vl in
+ if addressing_valid (fst addr_args') then addr_args' else (addr, args).
Definition make_addimm (n: int) (r: reg) :=
if Int.eq n Int.zero
diff --git a/x86/ConstpropOpproof.v b/x86/ConstpropOpproof.v
index e82c2963..5d79de6c 100644
--- a/x86/ConstpropOpproof.v
+++ b/x86/ConstpropOpproof.v
@@ -291,11 +291,16 @@ Lemma addr_strength_reduction_correct:
let (addr', args') := addr_strength_reduction addr args vl in
exists res', eval_addressing ge (Vptr sp Ptrofs.zero) addr' e##args' = Some res' /\ Val.lessdef res res'.
Proof.
- unfold eval_addressing, addr_strength_reduction. destruct Archi.ptr64.
-- intros until res. destruct (addressing_valid (fst (addr_strength_reduction_64 addr args vl))).
- apply addr_strength_reduction_64_correct.
- intros; exists res; auto.
-- apply addr_strength_reduction_32_correct.
+ intros until res. unfold addr_strength_reduction.
+ set (aa := if Archi.ptr64
+ then addr_strength_reduction_64 addr args vl
+ else addr_strength_reduction_32 addr args vl).
+ intros.
+ destruct (addressing_valid (fst aa)).
+- unfold aa, eval_addressing in *. destruct Archi.ptr64.
++ apply addr_strength_reduction_64_correct; auto.
++ apply addr_strength_reduction_32_correct; auto.
+- exists res; auto.
Qed.
Lemma make_cmp_base_correct: