lean4-htt/tests/lean/run/cse_perf_issue.lean
Leonardo de Moura f2ef24696d perf(library/compiler/cse): make sure we eliminate common sub expressions in match-cases associated with 0-ary constructors
The new test exposes the problem. Before this commit, the common
subexpressions at

```
def tst : tree → nat
| (tree.leaf v) := v
| (tree.node v l r) :=
  match f v with
  | tt := tst l + tst l - tst l   -- <<< HERE
  | ff := tst r
  end
```

were not converted into a let-exprs.
2017-11-09 13:32:15 -08:00

27 lines
497 B
Text

def f : nat → bool
| 0 := ff
| _ := tt
inductive tree
| leaf : nat → tree
| node : nat → tree → tree → tree
def mk_tree : nat → nat → tree
| 0 v := tree.leaf v
| (n+1) v :=
let t := mk_tree n v in
tree.node v t t
def tst : tree → nat
| (tree.leaf v) := v
| (tree.node v l r) :=
match f v with
| tt := tst l + tst l - tst l
| ff := tst r
end
def tree.is_node : tree → bool
| (tree.leaf v) := ff
| _ := tt
#eval timeit "tst" $ tst (mk_tree 100 10)