
Time bar (total: 2.5s)
| 1× | search |
| Probability | Valid | Unknown | Precondition | Infinite | Domain | Can't | Iter |
|---|---|---|---|---|---|---|---|
| 0% | 0% | 25% | 75% | 0% | 0% | 0% | 0 |
| 100% | 25% | 0% | 75% | 0% | 0% | 0% | 1 |
Compiled 17 to 9 computations (47.1% saved)
ival-add: 0.0ms (0% of total)ival-and: 0.0ms (0% of total)ival-mult: 0.0ms (0% of total)const: 0.0ms (0% of total)backward-pass: 0.0ms (0% of total)ival-<=: 0.0ms (0% of total)| 531.0ms | 8256× | 0 | valid |
ival-mult: 149.0ms (50.6% of total)ival-<=: 75.0ms (25.5% of total)ival-add: 41.0ms (13.9% of total)ival-and: 17.0ms (5.8% of total)const: 11.0ms (3.7% of total)backward-pass: 2.0ms (0.7% of total)| 2× | egg-herbie |
| 668× | fnmadd-define |
| 538× | fnmsub-define |
| 534× | fmsub-define |
| 382× | fmm-def |
| 364× | fma-define |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 21 |
| 1 | 48 | 18 |
| 2 | 162 | 18 |
| 3 | 599 | 18 |
| 4 | 1496 | 18 |
| 5 | 2233 | 18 |
| 6 | 2344 | 18 |
| 0 | 4 | 6 |
| 1 | 15 | 6 |
| 2 | 26 | 6 |
| 3 | 35 | 6 |
| 4 | 49 | 6 |
| 5 | 77 | 6 |
| 6 | 83 | 6 |
| 0 | 83 | 6 |
| 1× | iter limit |
| 1× | saturated |
| 1× | saturated |
| Inputs |
|---|
(+ (* x (* x x)) (* x x)) |
| Outputs |
|---|
(+ (* x (* x x)) (* x x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
| Inputs |
|---|
(+ (* x (* x x)) (* x x)) |
(+ (* (neg x) (* (neg x) (neg x))) (* (neg x) (neg x))) |
(neg (+ (* (neg x) (* (neg x) (neg x))) (* (neg x) (neg x)))) |
| Outputs |
|---|
(+ (* x (* x x)) (* x x)) |
(fma x (square x) (square x)) |
(+ (* (neg x) (* (neg x) (neg x))) (* (neg x) (neg x))) |
(fmsub x x (pow x 3)) |
(neg (+ (* (neg x) (* (neg x) (neg x))) (* (neg x) (neg x)))) |
(fmsub x (square x) (square x)) |
| Ground Truth | Overpredictions | Example | Underpredictions | Example | Subexpression |
|---|---|---|---|---|---|
| 0 | 0 | - | 0 | - | x |
| 0 | 0 | - | 0 | - | (*.f64 x x) |
| 0 | 0 | - | 0 | - | (*.f64 x (*.f64 x x)) |
| 0 | 0 | - | 0 | - | (+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
| 36.0ms | 512× | 0 | valid |
Compiled 50 to 14 computations (72% saved)
ival-mult: 7.0ms (67% of total)ival-add: 2.0ms (19.2% of total)const: 0.0ms (0% of total)backward-pass: 0.0ms (0% of total)Compiled 8 to 5 computations (37.5% saved)
| Status | Accuracy | Program |
|---|---|---|
| ▶ | 100.0% | (+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
| ▶ | 100.0% | (*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
Compiled 18 to 9 computations (50% saved)
| 1× | egg-herbie |
Found 6 expressions of interest:
| New | Metric | Score | Program |
|---|---|---|---|
| ✓ | cost-diff | 0 | (*.f64 x x) |
| ✓ | cost-diff | 0 | (*.f64 x (*.f64 x x)) |
| ✓ | cost-diff | 128 | (+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
| ✓ | cost-diff | 0 | (+.f64 x #s(literal 1 binary64)) |
| ✓ | cost-diff | 0 | (*.f64 x (+.f64 x #s(literal 1 binary64))) |
| ✓ | cost-diff | 0 | (*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
| 42× | *-lowering-*.f32 |
| 42× | *-lowering-*.f64 |
| 40× | fma-define |
| 28× | fma-lowering-fma.f32 |
| 28× | fma-lowering-fma.f64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 8 | 28 |
| 1 | 27 | 27 |
| 2 | 39 | 27 |
| 3 | 62 | 27 |
| 4 | 66 | 27 |
| 0 | 66 | 27 |
| 1× | iter limit |
| 1× | saturated |
| Inputs |
|---|
(* x (* x (+ x 1))) |
x |
(* x (+ x 1)) |
(+ x 1) |
1 |
(+ (* x (* x x)) (* x x)) |
(* x (* x x)) |
x |
(* x x) |
| Outputs |
|---|
(* x (* x (+ x 1))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
x |
(* x (+ x 1)) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(+ x 1) |
(+.f64 x #s(literal 1 binary64)) |
1 |
#s(literal 1 binary64) |
(+ (* x (* x x)) (* x x)) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
(* x (* x x)) |
(*.f64 x (*.f64 x x)) |
x |
(* x x) |
(*.f64 x x) |
Found 6 expressions of interest:
| New | Metric | Score | Program |
|---|---|---|---|
| ✓ | accuracy | 100.0% | (*.f64 x x) |
| ✓ | accuracy | 100.0% | (+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
| ✓ | accuracy | 99.8% | (*.f64 x (*.f64 x x)) |
| ✓ | accuracy | 100.0% | (+.f64 x #s(literal 1 binary64)) |
| ✓ | accuracy | 100.0% | (*.f64 x (+.f64 x #s(literal 1 binary64))) |
| ✓ | accuracy | 100.0% | (*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
| 36.0ms | 256× | 0 | valid |
Compiled 37 to 9 computations (75.7% saved)
ival-mult: 6.0ms (62.7% of total)ival-add: 3.0ms (31.4% of total)const: 0.0ms (0% of total)backward-pass: 0.0ms (0% of total)| Inputs |
|---|
#<alt (* x (* x (+ x 1)))> |
#<alt (* x (+ x 1))> |
#<alt (+ x 1)> |
#<alt (+ (* x (* x x)) (* x x))> |
#<alt (* x (* x x))> |
#<alt (* x x)> |
| Outputs |
|---|
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt x> |
#<alt (* x (+ 1 x))> |
#<alt (* x (+ 1 x))> |
#<alt (* x (+ 1 x))> |
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt 1> |
#<alt (+ 1 x)> |
#<alt (+ 1 x)> |
#<alt (+ 1 x)> |
#<alt x> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt x> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
18 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 0.0ms | x | @ | inf | (* x (* x (+ x 1))) |
| 0.0ms | x | @ | 0 | (* x (* x (+ x 1))) |
| 0.0ms | x | @ | 0 | (* x (* x x)) |
| 0.0ms | x | @ | -inf | (* x (* x x)) |
| 0.0ms | x | @ | inf | (+ (* x (* x x)) (* x x)) |
| 1× | batch-egg-rewrite |
| 56× | fma-define |
| 50× | *-lowering-*.f32 |
| 50× | *-lowering-*.f64 |
| 40× | fma-lowering-fma.f32 |
| 40× | sum5-define |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 8 | 25 |
| 1 | 29 | 24 |
| 2 | 47 | 24 |
| 3 | 78 | 24 |
| 4 | 110 | 24 |
| 5 | 141 | 24 |
| 6 | 179 | 24 |
| 7 | 193 | 24 |
| 0 | 193 | 24 |
| 1× | iter limit |
| 1× | saturated |
| Inputs |
|---|
(* x (* x (+ x 1))) |
(* x (+ x 1)) |
(+ x 1) |
(+ (* x (* x x)) (* x x)) |
(* x (* x x)) |
(* x x) |
| Outputs |
|---|
(+.f64 (*.f64 x x) (*.f64 x (*.f64 x x))) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 x x (*.f64 x (*.f64 x x))) |
(fma.f64 x (*.f64 x x) (*.f64 x x)) |
(fma.f64 #s(literal 1 binary64) (*.f64 x x) (*.f64 x (*.f64 x x))) |
(fma.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 (*.f64 x x) x (*.f64 x x)) |
(fma.f64 (*.f64 x x) #s(literal 1 binary64) (*.f64 x (*.f64 x x))) |
(fma.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64) (*.f64 x x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64))))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
(*.f64 (*.f64 x (+.f64 x #s(literal 1 binary64))) x) |
(*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) |
(*.f64 (*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) #s(literal 1 binary64)) |
(+.f64 x (*.f64 x x)) |
(+.f64 (*.f64 x x) x) |
(fma.f64 x x x) |
(fma.f64 x #s(literal 1 binary64) (*.f64 x x)) |
(fma.f64 #s(literal 1 binary64) x (*.f64 x x)) |
(fma.f64 #s(literal 1 binary64) (*.f64 x x) x) |
(fma.f64 (*.f64 x x) #s(literal 1 binary64) x) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(*.f64 #s(literal 1 binary64) (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) x) |
(*.f64 (*.f64 x (+.f64 x #s(literal 1 binary64))) #s(literal 1 binary64)) |
(+.f64 x #s(literal 1 binary64)) |
(+.f64 #s(literal 1 binary64) x) |
(fma.f64 x #s(literal 1 binary64) #s(literal 1 binary64)) |
(fma.f64 #s(literal 1 binary64) x #s(literal 1 binary64)) |
(*.f64 #s(literal 1 binary64) (+.f64 x #s(literal 1 binary64))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) #s(literal 1 binary64)) |
(+.f64 (*.f64 x x) (*.f64 x (*.f64 x x))) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 x x (*.f64 x (*.f64 x x))) |
(fma.f64 x (*.f64 x x) (*.f64 x x)) |
(fma.f64 #s(literal 1 binary64) (*.f64 x x) (*.f64 x (*.f64 x x))) |
(fma.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 (*.f64 x x) x (*.f64 x x)) |
(fma.f64 (*.f64 x x) #s(literal 1 binary64) (*.f64 x (*.f64 x x))) |
(fma.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64) (*.f64 x x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64))))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
(*.f64 (*.f64 x (+.f64 x #s(literal 1 binary64))) x) |
(*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) |
(*.f64 (*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) #s(literal 1 binary64)) |
(exp.f64 (*.f64 #s(literal 3 binary64) (log.f64 x))) |
(pow.f64 x #s(literal 3 binary64)) |
(pow.f64 (exp.f64 #s(literal 3 binary64)) (log.f64 x)) |
(*.f64 x (*.f64 x x)) |
(*.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x))) |
(*.f64 (*.f64 x x) x) |
(*.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64)) |
(exp.f64 (*.f64 #s(literal 2 binary64) (log.f64 x))) |
(pow.f64 x #s(literal 2 binary64)) |
(pow.f64 (exp.f64 #s(literal 2 binary64)) (log.f64 x)) |
(*.f64 x x) |
(*.f64 #s(literal 1 binary64) (*.f64 x x)) |
(*.f64 (*.f64 x x) #s(literal 1 binary64)) |
| 1× | egg-herbie |
| 4678× | *-lowering-*.f32 |
| 4678× | *-lowering-*.f64 |
| 4214× | cube-prod |
| 3010× | /-lowering-/.f32 |
| 3010× | /-lowering-/.f64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 14 | 298 |
| 1 | 49 | 255 |
| 2 | 86 | 255 |
| 3 | 244 | 255 |
| 4 | 1407 | 255 |
| 5 | 2398 | 255 |
| 6 | 3219 | 255 |
| 7 | 3634 | 255 |
| 8 | 4031 | 255 |
| 9 | 4507 | 255 |
| 10 | 4999 | 255 |
| 11 | 5541 | 255 |
| 12 | 5731 | 255 |
| 13 | 5776 | 255 |
| 14 | 5776 | 255 |
| 15 | 6177 | 255 |
| 16 | 6782 | 255 |
| 17 | 7466 | 255 |
| 0 | 8009 | 255 |
| 1× | iter limit |
| 1× | node limit |
| Inputs |
|---|
(pow x 2) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
x |
(* x (+ 1 x)) |
(* x (+ 1 x)) |
(* x (+ 1 x)) |
(pow x 2) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(pow x 2) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
1 |
(+ 1 x) |
(+ 1 x) |
(+ 1 x) |
x |
(* x (+ 1 (/ 1 x))) |
(* x (+ 1 (/ 1 x))) |
(* x (+ 1 (/ 1 x))) |
x |
(* x (+ 1 (/ 1 x))) |
(* x (+ 1 (/ 1 x))) |
(* x (+ 1 (/ 1 x))) |
(pow x 2) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
| Outputs |
|---|
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
x |
(* x (+ 1 x)) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* x (+ 1 x)) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* x (+ 1 x)) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
1 |
#s(literal 1 binary64) |
(+ 1 x) |
(+.f64 x #s(literal 1 binary64)) |
(+ 1 x) |
(+.f64 x #s(literal 1 binary64)) |
(+ 1 x) |
(+.f64 x #s(literal 1 binary64)) |
x |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
x |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
Compiled 1208 to 97 computations (92% saved)
4 alts after pruning (4 fresh and 0 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 146 | 4 | 150 |
| Fresh | 0 | 0 | 0 |
| Picked | 2 | 0 | 2 |
| Done | 0 | 0 | 0 |
| Total | 148 | 4 | 152 |
| Status | Accuracy | Program |
|---|---|---|
| ▶ | 100.0% | (fma.f64 x x (*.f64 x (*.f64 x x))) |
| ▶ | 100.0% | (*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
| ▶ | 100.0% | (*.f64 x (+.f64 (*.f64 x x) x)) |
| ▶ | 98.4% | (*.f64 x x) |
Compiled 29 to 15 computations (48.3% saved)
| 1× | egg-herbie |
Found 10 expressions of interest:
| New | Metric | Score | Program |
|---|---|---|---|
| ✓ | cost-diff | 0 | (*.f64 x x) |
| ✓ | cost-diff | 0 | (*.f64 x (*.f64 x x)) |
| ✓ | cost-diff | 6400 | (fma.f64 x x (*.f64 x (*.f64 x x))) |
| ✓ | cost-diff | 0 | (*.f64 x x) |
| ✓ | cost-diff | 0 | (+.f64 x #s(literal 1 binary64)) |
| ✓ | cost-diff | 0 | (*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
| ✓ | cost-diff | 0 | (*.f64 x x) |
| ✓ | cost-diff | 0 | (+.f64 (*.f64 x x) x) |
| ✓ | cost-diff | 0 | (*.f64 x (+.f64 (*.f64 x x) x)) |
| ✓ | cost-diff | 0 | (*.f64 x x) |
| 64× | fma-define |
| 42× | *-lowering-*.f32 |
| 42× | *-lowering-*.f64 |
| 28× | fma-lowering-fma.f32 |
| 28× | fma-lowering-fma.f64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 41 |
| 1 | 25 | 41 |
| 2 | 36 | 41 |
| 3 | 50 | 41 |
| 4 | 78 | 41 |
| 5 | 85 | 41 |
| 0 | 85 | 41 |
| 1× | iter limit |
| 1× | saturated |
| Inputs |
|---|
(* x x) |
x |
(* x (+ (* x x) x)) |
x |
(+ (* x x) x) |
(* x x) |
(* (+ x 1) (* x x)) |
(+ x 1) |
x |
1 |
(* x x) |
(+ (* x x) (* x (* x x))) |
x |
(* x (* x x)) |
(* x x) |
| Outputs |
|---|
(* x x) |
(*.f64 x x) |
x |
(* x (+ (* x x) x)) |
(*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) |
x |
(+ (* x x) x) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* x x) |
(*.f64 x x) |
(* (+ x 1) (* x x)) |
(*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) |
(+ x 1) |
(+.f64 x #s(literal 1 binary64)) |
x |
1 |
#s(literal 1 binary64) |
(* x x) |
(*.f64 x x) |
(+ (* x x) (* x (* x x))) |
(*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) |
x |
(* x (* x x)) |
(*.f64 x (*.f64 x x)) |
(* x x) |
(*.f64 x x) |
Found 10 expressions of interest:
| New | Metric | Score | Program |
|---|---|---|---|
| ✓ | accuracy | 100.0% | (fma.f64 x x (*.f64 x (*.f64 x x))) |
| ✓ | accuracy | 100.0% | (*.f64 x x) |
| ✓ | accuracy | 99.8% | (*.f64 x (*.f64 x x)) |
| ✓ | accuracy | 100.0% | (+.f64 x #s(literal 1 binary64)) |
| ✓ | accuracy | 100.0% | (*.f64 x x) |
| ✓ | accuracy | 100.0% | (*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
| ✓ | accuracy | 100.0% | (+.f64 (*.f64 x x) x) |
| ✓ | accuracy | 100.0% | (*.f64 x x) |
| ✓ | accuracy | 100.0% | (*.f64 x (+.f64 (*.f64 x x) x)) |
| ✓ | accuracy | 100.0% | (*.f64 x x) |
| 41.0ms | 256× | 0 | valid |
Compiled 54 to 10 computations (81.5% saved)
ival-mult: 8.0ms (49.4% of total)ival-add: 4.0ms (24.7% of total)compiled-spec: 3.0ms (18.5% of total)const: 0.0ms (0% of total)backward-pass: 0.0ms (0% of total)| Inputs |
|---|
#<alt (* x x)> |
#<alt (* x (+ (* x x) x))> |
#<alt (+ (* x x) x)> |
#<alt (* (+ x 1) (* x x))> |
#<alt (+ x 1)> |
#<alt (+ (* x x) (* x (* x x)))> |
#<alt (* x (* x x))> |
| Outputs |
|---|
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt x> |
#<alt (* x (+ 1 x))> |
#<alt (* x (+ 1 x))> |
#<alt (* x (+ 1 x))> |
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 2) (+ 1 (/ 1 x)))> |
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt 1> |
#<alt (+ 1 x)> |
#<alt (+ 1 x)> |
#<alt (+ 1 x)> |
#<alt x> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt x> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (* x (+ 1 (/ 1 x)))> |
#<alt (pow x 2)> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (* (pow x 2) (+ 1 x))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (pow x 3)> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (* (pow x 3) (+ 1 (/ 1 x)))> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
#<alt (pow x 3)> |
21 calls:
| Time | Variable | Point | Expression | |
|---|---|---|---|---|
| 0.0ms | x | @ | -inf | (* x (+ (* x x) x)) |
| 0.0ms | x | @ | 0 | (* x (+ (* x x) x)) |
| 0.0ms | x | @ | inf | (* x (+ (* x x) x)) |
| 0.0ms | x | @ | inf | (* x (* x x)) |
| 0.0ms | x | @ | inf | (* (+ x 1) (* x x)) |
| 1× | batch-egg-rewrite |
| 84× | fma-define |
| 50× | *-lowering-*.f32 |
| 50× | *-lowering-*.f64 |
| 40× | fma-lowering-fma.f32 |
| 40× | sum5-define |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 9 | 30 |
| 1 | 27 | 30 |
| 2 | 44 | 30 |
| 3 | 64 | 30 |
| 4 | 109 | 30 |
| 5 | 135 | 30 |
| 6 | 179 | 30 |
| 7 | 216 | 30 |
| 0 | 216 | 30 |
| 1× | iter limit |
| 1× | saturated |
| Inputs |
|---|
(* x x) |
(* x (+ (* x x) x)) |
(+ (* x x) x) |
(* (+ x 1) (* x x)) |
(+ x 1) |
(+ (* x x) (* x (* x x))) |
(* x (* x x)) |
| Outputs |
|---|
(exp.f64 (*.f64 #s(literal 2 binary64) (log.f64 x))) |
(pow.f64 x #s(literal 2 binary64)) |
(pow.f64 (exp.f64 #s(literal 2 binary64)) (log.f64 x)) |
(*.f64 x x) |
(*.f64 (*.f64 x x) #s(literal 1 binary64)) |
(*.f64 #s(literal 1 binary64) (*.f64 x x)) |
(+.f64 (*.f64 x x) (*.f64 x (*.f64 x x))) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 x x (*.f64 x (*.f64 x x))) |
(fma.f64 x (*.f64 x x) (*.f64 x x)) |
(fma.f64 (*.f64 x x) x (*.f64 x x)) |
(fma.f64 (*.f64 x x) #s(literal 1 binary64) (*.f64 x (*.f64 x x))) |
(fma.f64 #s(literal 1 binary64) (*.f64 x x) (*.f64 x (*.f64 x x))) |
(fma.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64) (*.f64 x x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) |
(*.f64 (*.f64 x (+.f64 x #s(literal 1 binary64))) x) |
(*.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64)))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
(*.f64 (*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) #s(literal 1 binary64)) |
(+.f64 x (*.f64 x x)) |
(+.f64 (*.f64 x x) x) |
(fma.f64 x x x) |
(fma.f64 x #s(literal 1 binary64) (*.f64 x x)) |
(fma.f64 (*.f64 x x) #s(literal 1 binary64) x) |
(fma.f64 #s(literal 1 binary64) x (*.f64 x x)) |
(fma.f64 #s(literal 1 binary64) (*.f64 x x) x) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(*.f64 (*.f64 x (+.f64 x #s(literal 1 binary64))) #s(literal 1 binary64)) |
(*.f64 #s(literal 1 binary64) (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) x) |
(+.f64 (*.f64 x x) (*.f64 x (*.f64 x x))) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 x x (*.f64 x (*.f64 x x))) |
(fma.f64 x (*.f64 x x) (*.f64 x x)) |
(fma.f64 (*.f64 x x) x (*.f64 x x)) |
(fma.f64 (*.f64 x x) #s(literal 1 binary64) (*.f64 x (*.f64 x x))) |
(fma.f64 #s(literal 1 binary64) (*.f64 x x) (*.f64 x (*.f64 x x))) |
(fma.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64) (*.f64 x x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) |
(*.f64 (*.f64 x (+.f64 x #s(literal 1 binary64))) x) |
(*.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64)))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
(*.f64 (*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) #s(literal 1 binary64)) |
(+.f64 x #s(literal 1 binary64)) |
(+.f64 #s(literal 1 binary64) x) |
(fma.f64 x #s(literal 1 binary64) #s(literal 1 binary64)) |
(fma.f64 #s(literal 1 binary64) x #s(literal 1 binary64)) |
(*.f64 #s(literal 1 binary64) (+.f64 x #s(literal 1 binary64))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) #s(literal 1 binary64)) |
(+.f64 (*.f64 x x) (*.f64 x (*.f64 x x))) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 x x (*.f64 x (*.f64 x x))) |
(fma.f64 x (*.f64 x x) (*.f64 x x)) |
(fma.f64 (*.f64 x x) x (*.f64 x x)) |
(fma.f64 (*.f64 x x) #s(literal 1 binary64) (*.f64 x (*.f64 x x))) |
(fma.f64 #s(literal 1 binary64) (*.f64 x x) (*.f64 x (*.f64 x x))) |
(fma.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64) (*.f64 x x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) |
(*.f64 (*.f64 x (+.f64 x #s(literal 1 binary64))) x) |
(*.f64 #s(literal 1 binary64) (*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64)))) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
(*.f64 (*.f64 (*.f64 x x) (+.f64 x #s(literal 1 binary64))) #s(literal 1 binary64)) |
(exp.f64 (*.f64 #s(literal 3 binary64) (log.f64 x))) |
(pow.f64 x #s(literal 3 binary64)) |
(pow.f64 (exp.f64 #s(literal 3 binary64)) (log.f64 x)) |
(*.f64 x (*.f64 x x)) |
(*.f64 (*.f64 x x) x) |
(*.f64 #s(literal 1 binary64) (*.f64 x (*.f64 x x))) |
(*.f64 (*.f64 x (*.f64 x x)) #s(literal 1 binary64)) |
| 1× | egg-herbie |
| 4678× | *-lowering-*.f32 |
| 4678× | *-lowering-*.f64 |
| 4214× | cube-prod |
| 3010× | /-lowering-/.f32 |
| 3010× | /-lowering-/.f64 |
Useful iterations: 1 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 14 | 370 |
| 1 | 49 | 317 |
| 2 | 86 | 317 |
| 3 | 244 | 317 |
| 4 | 1407 | 317 |
| 5 | 2398 | 317 |
| 6 | 3219 | 317 |
| 7 | 3634 | 317 |
| 8 | 4031 | 317 |
| 9 | 4507 | 317 |
| 10 | 4999 | 317 |
| 11 | 5541 | 317 |
| 12 | 5731 | 317 |
| 13 | 5776 | 317 |
| 14 | 5776 | 317 |
| 15 | 6177 | 317 |
| 16 | 6782 | 317 |
| 17 | 7466 | 317 |
| 0 | 8009 | 317 |
| 1× | iter limit |
| 1× | node limit |
| Inputs |
|---|
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(pow x 2) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
x |
(* x (+ 1 x)) |
(* x (+ 1 x)) |
(* x (+ 1 x)) |
(pow x 2) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(pow x 2) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(pow x 2) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
1 |
(+ 1 x) |
(+ 1 x) |
(+ 1 x) |
x |
(* x (+ 1 (/ 1 x))) |
(* x (+ 1 (/ 1 x))) |
(* x (+ 1 (/ 1 x))) |
x |
(* x (+ 1 (/ 1 x))) |
(* x (+ 1 (/ 1 x))) |
(* x (+ 1 (/ 1 x))) |
(pow x 2) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(* (pow x 2) (+ 1 x)) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(pow x 3) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
(pow x 3) |
| Outputs |
|---|
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
x |
(* x (+ 1 x)) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* x (+ 1 x)) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* x (+ 1 x)) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(* (pow x 2) (+ 1 (/ 1 x))) |
(*.f64 x (+.f64 x #s(literal 1 binary64))) |
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
1 |
#s(literal 1 binary64) |
(+ 1 x) |
(+.f64 x #s(literal 1 binary64)) |
(+ 1 x) |
(+.f64 x #s(literal 1 binary64)) |
(+ 1 x) |
(+.f64 x #s(literal 1 binary64)) |
x |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
x |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(* x (+ 1 (/ 1 x))) |
(+.f64 x #s(literal 1 binary64)) |
(pow x 2) |
(*.f64 x x) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 2) (+ 1 x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(* (pow x 3) (+ 1 (/ 1 x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
(pow x 3) |
(*.f64 x (*.f64 x x)) |
Compiled 1535 to 100 computations (93.5% saved)
4 alts after pruning (0 fresh and 4 done)
| Pruned | Kept | Total | |
|---|---|---|---|
| New | 213 | 0 | 213 |
| Fresh | 0 | 0 | 0 |
| Picked | 0 | 4 | 4 |
| Done | 0 | 0 | 0 |
| Total | 213 | 4 | 217 |
| Status | Accuracy | Program |
|---|---|---|
| ✓ | 100.0% | (fma.f64 x x (*.f64 x (*.f64 x x))) |
| ✓ | 100.0% | (*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
| ✓ | 100.0% | (*.f64 x (+.f64 (*.f64 x x) x)) |
| ✓ | 98.4% | (*.f64 x x) |
Compiled 71 to 27 computations (62% saved)
| Inputs |
|---|
(*.f64 x x) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 x (+.f64 (*.f64 x x) x)) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(fma.f64 x x (*.f64 x (*.f64 x x))) |
| Outputs |
|---|
(fma.f64 x x (*.f64 x (*.f64 x x))) |
2 calls:
| 30.0ms | x |
| 2.0ms | (+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
| Accuracy | Segments | Branch |
|---|---|---|
| 100.0% | 1 | x |
| 100.0% | 1 | (+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
Compiled 12 to 5 computations (58.3% saved)
| Inputs |
|---|
(*.f64 x x) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 x (+.f64 (*.f64 x x) x)) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
| Outputs |
|---|
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
2 calls:
| 2.0ms | x |
| 2.0ms | (+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
| Accuracy | Segments | Branch |
|---|---|---|
| 100.0% | 1 | x |
| 100.0% | 1 | (+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
Compiled 12 to 5 computations (58.3% saved)
| Inputs |
|---|
(*.f64 x x) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 x (+.f64 (*.f64 x x) x)) |
(*.f64 (+.f64 x #s(literal 1 binary64)) (*.f64 x x)) |
| Outputs |
|---|
(*.f64 x (+.f64 (*.f64 x x) x)) |
1 calls:
| 2.0ms | x |
| Accuracy | Segments | Branch |
|---|---|---|
| 100.0% | 1 | x |
Compiled 2 to 1 computations (50% saved)
| Inputs |
|---|
(*.f64 x x) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
| Outputs |
|---|
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
1 calls:
| 1.0ms | x |
| Accuracy | Segments | Branch |
|---|---|---|
| 100.0% | 1 | x |
Compiled 2 to 1 computations (50% saved)
Total -0.0b remaining (-0%)
Threshold costs -0b (-0%)
| Inputs |
|---|
(*.f64 x x) |
| Outputs |
|---|
(*.f64 x x) |
1 calls:
| 1.0ms | x |
| Accuracy | Segments | Branch |
|---|---|---|
| 98.4% | 1 | x |
Compiled 2 to 1 computations (50% saved)
| 1× | egg-herbie |
| 8× | *-commutative_binary64 |
| 6× | +-commutative_binary64 |
| 2× | 1-exp_binary64 |
| 2× | 1-exp_binary32 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 11 | 34 |
| 1 | 21 | 34 |
| 1× | saturated |
| Inputs |
|---|
(fma.f64 x x (*.f64 x (*.f64 x x))) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(*.f64 x (+.f64 (*.f64 x x) x)) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 x x) |
| Outputs |
|---|
(fma.f64 x x (*.f64 x (*.f64 x x))) |
(+.f64 (*.f64 x (*.f64 x x)) (*.f64 x x)) |
(+.f64 (*.f64 x x) (*.f64 x (*.f64 x x))) |
(*.f64 x (+.f64 (*.f64 x x) x)) |
(*.f64 x (+.f64 x (*.f64 x x))) |
(*.f64 x (*.f64 x (+.f64 x #s(literal 1 binary64)))) |
(*.f64 x x) |
| 4678× | *-lowering-*.f32 |
| 4678× | *-lowering-*.f64 |
| 4214× | cube-prod |
| 3010× | /-lowering-/.f32 |
| 3010× | /-lowering-/.f64 |
Useful iterations: 0 (0.0ms)
| Iter | Nodes | Cost |
|---|---|---|
| 0 | 4 | 6 |
| 1 | 15 | 6 |
| 2 | 26 | 6 |
| 3 | 35 | 6 |
| 4 | 49 | 6 |
| 5 | 77 | 6 |
| 6 | 83 | 6 |
| 0 | 83 | 6 |
| 0 | 8 | 25 |
| 1 | 29 | 24 |
| 2 | 47 | 24 |
| 3 | 78 | 24 |
| 4 | 110 | 24 |
| 5 | 141 | 24 |
| 6 | 179 | 24 |
| 7 | 193 | 24 |
| 0 | 193 | 24 |
| 0 | 14 | 298 |
| 1 | 49 | 255 |
| 2 | 86 | 255 |
| 3 | 244 | 255 |
| 4 | 1407 | 255 |
| 5 | 2398 | 255 |
| 6 | 3219 | 255 |
| 7 | 3634 | 255 |
| 8 | 4031 | 255 |
| 9 | 4507 | 255 |
| 10 | 4999 | 255 |
| 11 | 5541 | 255 |
| 12 | 5731 | 255 |
| 13 | 5776 | 255 |
| 14 | 5776 | 255 |
| 15 | 6177 | 255 |
| 16 | 6782 | 255 |
| 17 | 7466 | 255 |
| 0 | 8009 | 255 |
| 1× | done |
| 1× | iter limit |
| 1× | node limit |
| 1× | iter limit |
| 1× | saturated |
| 1× | iter limit |
| 1× | saturated |
Compiled 88 to 41 computations (53.4% saved)
Compiled 106 to 40 computations (62.3% saved)
Loading profile data...