diff options
author | Jason Gross <jgross@mit.edu> | 2017-04-14 19:36:17 -0400 |
---|---|---|
committer | Jason Gross <jgross@mit.edu> | 2017-04-14 19:36:33 -0400 |
commit | 62058145e881e9f96da18ee970182a95af957882 (patch) | |
tree | 8f6e737c44750ad776918a10c0fcfc7cea77a41a /src/Compilers/CommonSubexpressionEliminationWf.v | |
parent | aa0052b9469c876947cbe7ed007ae8113b711fdc (diff) |
Add support for cse-modulo-normalization
Diffstat (limited to 'src/Compilers/CommonSubexpressionEliminationWf.v')
-rw-r--r-- | src/Compilers/CommonSubexpressionEliminationWf.v | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/Compilers/CommonSubexpressionEliminationWf.v b/src/Compilers/CommonSubexpressionEliminationWf.v index 431978c7b..b66db5c33 100644 --- a/src/Compilers/CommonSubexpressionEliminationWf.v +++ b/src/Compilers/CommonSubexpressionEliminationWf.v @@ -29,8 +29,9 @@ Section symbolic. (interp_base_type : base_type_code -> Type) (op : flat_type base_type_code -> flat_type base_type_code -> Type) (symbolize_op : forall s d, op s d -> op_code). - Local Notation symbolic_expr := (symbolic_expr base_type_code op_code). + Context (normalize_symbolic_op_arguments : op_code -> symbolic_expr -> symbolic_expr). + Local Notation symbolic_expr_beq := (@symbolic_expr_beq base_type_code op_code base_type_code_beq op_code_beq). Local Notation symbolic_expr_lb := (@internal_symbolic_expr_dec_lb base_type_code op_code base_type_code_beq op_code_beq base_type_code_lb op_code_lb). Local Notation symbolic_expr_bl := (@internal_symbolic_expr_dec_bl base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl op_code_bl). @@ -46,9 +47,10 @@ Section symbolic. Local Notation symbolicify_smart_var := (@symbolicify_smart_var base_type_code op_code). Local Notation symbolize_exprf := (@symbolize_exprf base_type_code op_code op symbolize_op). - Local Notation csef := (@csef base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl op symbolize_op). - Local Notation cse := (@cse base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl op symbolize_op). - Local Notation CSE := (@CSE base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl op symbolize_op). + Local Notation norm_symbolize_exprf := (@norm_symbolize_exprf base_type_code op_code op symbolize_op normalize_symbolic_op_arguments). + Local Notation csef := (@csef base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl op symbolize_op normalize_symbolic_op_arguments). + Local Notation cse := (@cse base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl op symbolize_op normalize_symbolic_op_arguments). + Local Notation CSE := (@CSE base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl op symbolize_op normalize_symbolic_op_arguments). Local Notation SymbolicExprContext := (@SymbolicExprContext base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl). Local Notation SymbolicExprContextOk := (@SymbolicExprContextOk base_type_code op_code base_type_code_beq op_code_beq base_type_code_bl base_type_code_lb op_code_bl op_code_lb). Local Notation prepend_prefix := (@prepend_prefix base_type_code op). @@ -69,6 +71,14 @@ Section symbolic. induction Hwf; simpl; erewrite_hyp ?* by eassumption; reflexivity. Qed. + Lemma wff_norm_symbolize_exprf G t e1 e2 + (HG : forall t x y, List.In (existT _ t (x, y)) G -> snd x = snd y) + (Hwf : wff G e1 e2) + : @norm_symbolize_exprf var1 t e1 = @norm_symbolize_exprf var2 t e2. + Proof. + unfold norm_symbolize_exprf; erewrite wff_symbolize_exprf by eassumption; reflexivity. + Qed. + Local Arguments lookupb : simpl never. Local Arguments extendb : simpl never. Lemma wff_csef G G' t e1 e2 @@ -92,7 +102,7 @@ Section symbolic. Proof. revert dependent m1; revert m2; revert dependent G'. induction Hwf; simpl; intros; try constructor; auto. - { erewrite wff_symbolize_exprf by eassumption. + { erewrite wff_norm_symbolize_exprf by eassumption. break_innermost_match; try match goal with | [ H : lookupb ?m1 ?x = Some ?k, H' : lookupb ?m2 ?x = None |- _ ] |