FastMath test2

Time bar (total: 2.2s)

analyze0.0ms (0%)

Algorithm
search
Search
ProbabilityValidUnknownPreconditionInfiniteDomainCan'tIter
0%0%99.9%0.1%0%0%0%0
100%99.9%0%0.1%0%0%0%1
Compiler

Compiled 14 to 10 computations (28.6% saved)

Precisions
Click to see histograms. Total time spent on operations: 0.0ms
ival-add: 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)

sample1.0s (47.4%)

Results
817.0ms8153×0valid
9.0ms44×2valid
8.0ms59×1valid
Precisions
Click to see histograms. Total time spent on operations: 510.0ms
ival-mult: 346.0ms (67.8% of total)
ival-add: 144.0ms (28.2% of total)
const: 15.0ms (2.9% of total)
backward-pass: 5.0ms (1% of total)
Bogosity

preprocess69.0ms (3.1%)

Algorithm
egg-herbie
Rules
2208×sum3-define
1952×sum4-define
1908×fnmadd-define
1758×fnmsub-define
1680×fmm-def
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
02659
19244
231132
3110430
4360330
5714130
099
1207
2475
3785
4865
5875
0875
Stop Event
iter limit
saturated
node limit
Calls
Call 1
Inputs
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
Outputs
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
Call 2
Inputs
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
(+ (+ (* (neg d1) 10) (* (neg d1) d2)) (* (neg d1) 20))
(+ (+ (* d1 10) (* d1 (neg d2))) (* d1 20))
(neg (+ (+ (* (neg d1) 10) (* (neg d1) d2)) (* (neg d1) 20)))
(neg (+ (+ (* d1 10) (* d1 (neg d2))) (* d1 20)))
(+ (+ (* d2 10) (* d2 d1)) (* d2 20))
Outputs
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
(* d1 (+ d2 30))
(+ (+ (* (neg d1) 10) (* (neg d1) d2)) (* (neg d1) 20))
(* d1 (- -30 d2))
(+ (+ (* d1 10) (* d1 (neg d2))) (* d1 20))
(* d1 (- 30 d2))
(neg (+ (+ (* (neg d1) 10) (* (neg d1) d2)) (* (neg d1) 20)))
(* d1 (+ d2 30))
(neg (+ (+ (* d1 10) (* d1 (neg d2))) (* d1 20)))
(* d1 (+ d2 -30))
(+ (+ (* d2 10) (* d2 d1)) (* d2 20))
(* d2 (+ d1 30))
Symmetry

(negabs d1)

explain115.0ms (5.2%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
00-0-#s(literal 10 binary64)
00-0-#s(literal 20 binary64)
00-0-d1
00-0-d2
00-0-(+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2))
00-0-(*.f64 d1 #s(literal 20 binary64))
00-0-(*.f64 d1 d2)
00-0-(*.f64 d1 #s(literal 10 binary64))
00-0-(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
Results
58.0ms472×0valid
9.0ms28×2valid
3.0ms12×1valid
Compiler

Compiled 81 to 29 computations (64.2% saved)

Precisions
Click to see histograms. Total time spent on operations: 23.0ms
ival-mult: 11.0ms (48% of total)
ival-add: 9.0ms (39.3% of total)
backward-pass: 2.0ms (8.7% of total)
const: 1.0ms (4.4% of total)

eval0.0ms (0%)

Compiler

Compiled 7 to 5 computations (28.6% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
99.7%
(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
99.9%
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
Compiler

Compiled 20 to 14 computations (30% saved)

simplify15.0ms (0.7%)

Algorithm
egg-herbie
Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 d2)
cost-diff0
(*.f64 d1 #s(literal 10 binary64))
cost-diff128
(+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2))
cost-diff384
(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
cost-diff0
(+.f64 d2 #s(literal 30 binary64))
cost-diff0
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
Rules
56×fma-define
48×fma-lowering-fma.f32
48×fma-lowering-fma.f64
44×+-lowering-+.f64
44×+-lowering-+.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01234
13034
26334
39034
49434
09434
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* d1 (+ d2 30))
d1
(+ d2 30)
d2
30
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
(+ (* d1 10) (* d1 d2))
(* d1 10)
d1
10
(* d1 d2)
d2
(* d1 20)
20
Outputs
(* d1 (+ d2 30))
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
d1
(+ d2 30)
(+.f64 d2 #s(literal 30 binary64))
d2
30
#s(literal 30 binary64)
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
(+ (* d1 10) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 10)
(*.f64 d1 #s(literal 10 binary64))
d1
10
#s(literal 10 binary64)
(* d1 d2)
(*.f64 d1 d2)
d2
(* d1 20)
(*.f64 d1 #s(literal 20 binary64))
20
#s(literal 20 binary64)

localize88.0ms (4%)

Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d1 #s(literal 20 binary64))
accuracy100.0%
(*.f64 d1 #s(literal 10 binary64))
accuracy99.9%
(+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2))
accuracy99.8%
(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
accuracy100.0%
(+.f64 d2 #s(literal 30 binary64))
accuracy99.9%
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
Results
40.0ms236×0valid
33.0ms14×2valid
2.0ms1valid
Compiler

Compiled 45 to 13 computations (71.1% saved)

Precisions
Click to see histograms. Total time spent on operations: 19.0ms
ival-mult: 13.0ms (67.9% of total)
ival-add: 5.0ms (26.1% of total)
const: 1.0ms (5.2% of total)
backward-pass: 1.0ms (5.2% of total)

series8.0ms (0.4%)

Counts
7 → 132
Calls
Call 1
Inputs
#<alt (* d1 (+ d2 30))>
#<alt (+ d2 30)>
#<alt (+ (+ (* d1 10) (* d1 d2)) (* d1 20))>
#<alt (+ (* d1 10) (* d1 d2))>
#<alt (* d1 10)>
#<alt (* d1 d2)>
#<alt (* d1 20)>
Outputs
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* 30 d1)>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
#<alt 30>
#<alt (+ 30 d2)>
#<alt (+ 30 d2)>
#<alt (+ 30 d2)>
#<alt d2>
#<alt (* d2 (+ 1 (* 30 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 30 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 30 (/ 1 d2))))>
#<alt d2>
#<alt (* d2 (+ 1 (* 30 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 30 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 30 (/ 1 d2))))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (+ (* 10 d1) (* 20 d1))>
#<alt (+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))>
#<alt (+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))>
#<alt (+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))>
#<alt (* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))>
#<alt (* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))>
#<alt (* d1 (+ 10 d2))>
#<alt (* d1 (+ 10 d2))>
#<alt (* d1 (+ 10 d2))>
#<alt (* d1 (+ 10 d2))>
#<alt (* d1 (+ 10 d2))>
#<alt (* d1 (+ 10 d2))>
#<alt (* d1 (+ 10 d2))>
#<alt (* d1 (+ 10 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 10)))>
#<alt (* -1 (* d1 (- (* -1 d2) 10)))>
#<alt (* -1 (* d1 (- (* -1 d2) 10)))>
#<alt (* -1 (* d1 (- (* -1 d2) 10)))>
#<alt (* 10 d1)>
#<alt (+ (* 10 d1) (* d1 d2))>
#<alt (+ (* 10 d1) (* d1 d2))>
#<alt (+ (* 10 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 10 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 10 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 10 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* 10 d1)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
#<alt (* 20 d1)>
Calls

33 calls:

TimeVariablePointExpression
2.0ms
d1
@inf
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
1.0ms
d1
@0
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
0.0ms
d2
@-inf
(* d1 (+ d2 30))
0.0ms
d1
@0
(* d1 (+ d2 30))
0.0ms
d2
@0
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))

rewrite30.0ms (1.3%)

Algorithm
batch-egg-rewrite
Rules
56×fma-define
48×fma-lowering-fma.f32
48×fma-lowering-fma.f64
44×+-lowering-+.f64
44×+-lowering-+.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01227
13027
26327
39027
49427
09427
Stop Event
iter limit
saturated
Counts
7 → 60
Calls
Call 1
Inputs
(* d1 (+ d2 30))
(+ d2 30)
(+ (+ (* d1 10) (* d1 d2)) (* d1 20))
(+ (* d1 10) (* d1 d2))
(* d1 10)
(* d1 d2)
(* d1 20)
Outputs
(+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 20 binary64))))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 10 binary64))) (*.f64 d1 #s(literal 20 binary64)))
(+.f64 (*.f64 d1 #s(literal 20 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 10 binary64))))
(+.f64 (*.f64 d1 #s(literal 30 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 20 binary64))) (*.f64 d1 #s(literal 10 binary64)))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 30 binary64)))
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
(fma.f64 d1 #s(literal 10 binary64) (*.f64 d1 (+.f64 d2 #s(literal 20 binary64))))
(fma.f64 d1 #s(literal 20 binary64) (*.f64 d1 (+.f64 d2 #s(literal 10 binary64))))
(fma.f64 d1 (+.f64 d2 #s(literal 10 binary64)) (*.f64 d1 #s(literal 20 binary64)))
(fma.f64 d1 (+.f64 d2 #s(literal 20 binary64)) (*.f64 d1 #s(literal 10 binary64)))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 30 binary64)))
(fma.f64 #s(literal 30 binary64) d1 (*.f64 d1 d2))
(fma.f64 #s(literal 10 binary64) d1 (*.f64 d1 (+.f64 d2 #s(literal 20 binary64))))
(fma.f64 #s(literal 20 binary64) d1 (*.f64 d1 (+.f64 d2 #s(literal 10 binary64))))
(fma.f64 (+.f64 d2 #s(literal 10 binary64)) d1 (*.f64 d1 #s(literal 20 binary64)))
(fma.f64 (+.f64 d2 #s(literal 20 binary64)) d1 (*.f64 d1 #s(literal 10 binary64)))
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
(*.f64 (+.f64 d2 #s(literal 30 binary64)) d1)
(+.f64 d2 #s(literal 30 binary64))
(+.f64 #s(literal 30 binary64) d2)
(+.f64 #s(literal 10 binary64) (+.f64 d2 #s(literal 20 binary64)))
(+.f64 #s(literal 20 binary64) (+.f64 d2 #s(literal 10 binary64)))
(+.f64 (+.f64 d2 #s(literal 10 binary64)) #s(literal 20 binary64))
(+.f64 (+.f64 d2 #s(literal 20 binary64)) #s(literal 10 binary64))
(+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 20 binary64))))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 10 binary64))) (*.f64 d1 #s(literal 20 binary64)))
(+.f64 (*.f64 d1 #s(literal 20 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 10 binary64))))
(+.f64 (*.f64 d1 #s(literal 30 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 20 binary64))) (*.f64 d1 #s(literal 10 binary64)))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 30 binary64)))
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
(fma.f64 d1 #s(literal 10 binary64) (*.f64 d1 (+.f64 d2 #s(literal 20 binary64))))
(fma.f64 d1 #s(literal 20 binary64) (*.f64 d1 (+.f64 d2 #s(literal 10 binary64))))
(fma.f64 d1 (+.f64 d2 #s(literal 10 binary64)) (*.f64 d1 #s(literal 20 binary64)))
(fma.f64 d1 (+.f64 d2 #s(literal 20 binary64)) (*.f64 d1 #s(literal 10 binary64)))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 30 binary64)))
(fma.f64 #s(literal 30 binary64) d1 (*.f64 d1 d2))
(fma.f64 #s(literal 10 binary64) d1 (*.f64 d1 (+.f64 d2 #s(literal 20 binary64))))
(fma.f64 #s(literal 20 binary64) d1 (*.f64 d1 (+.f64 d2 #s(literal 10 binary64))))
(fma.f64 (+.f64 d2 #s(literal 10 binary64)) d1 (*.f64 d1 #s(literal 20 binary64)))
(fma.f64 (+.f64 d2 #s(literal 20 binary64)) d1 (*.f64 d1 #s(literal 10 binary64)))
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
(*.f64 (+.f64 d2 #s(literal 30 binary64)) d1)
(+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 10 binary64)))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 10 binary64)))
(fma.f64 d1 #s(literal 10 binary64) (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 10 binary64)))
(fma.f64 #s(literal 10 binary64) d1 (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(*.f64 (+.f64 d2 #s(literal 10 binary64)) d1)
(*.f64 d1 #s(literal 10 binary64))
(*.f64 #s(literal 10 binary64) d1)
(*.f64 d1 d2)
(*.f64 d2 d1)
(*.f64 d1 #s(literal 20 binary64))
(*.f64 #s(literal 20 binary64) d1)

simplify146.0ms (6.6%)

Algorithm
egg-herbie
Rules
2096×fnmsub-define
1920×fmm-def
1918×fma-lowering-fma.f32
1918×fma-lowering-fma.f64
1354×*-lowering-*.f32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
058516
1195516
2547516
31810516
44912516
08018516
Stop Event
iter limit
node limit
Counts
132 → 132
Calls
Call 1
Inputs
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* 30 d1)
(+ (* 30 d1) (* d1 d2))
(+ (* 30 d1) (* d1 d2))
(+ (* 30 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
30
(+ 30 d2)
(+ 30 d2)
(+ 30 d2)
d2
(* d2 (+ 1 (* 30 (/ 1 d2))))
(* d2 (+ 1 (* 30 (/ 1 d2))))
(* d2 (+ 1 (* 30 (/ 1 d2))))
d2
(* d2 (+ 1 (* 30 (/ 1 d2))))
(* d2 (+ 1 (* 30 (/ 1 d2))))
(* d2 (+ 1 (* 30 (/ 1 d2))))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(+ (* 10 d1) (* 20 d1))
(+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))
(+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))
(+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))
(* d1 d2)
(* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))
(* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))
(* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))
(* d1 (+ 10 d2))
(* d1 (+ 10 d2))
(* d1 (+ 10 d2))
(* d1 (+ 10 d2))
(* d1 (+ 10 d2))
(* d1 (+ 10 d2))
(* d1 (+ 10 d2))
(* d1 (+ 10 d2))
(* -1 (* d1 (- (* -1 d2) 10)))
(* -1 (* d1 (- (* -1 d2) 10)))
(* -1 (* d1 (- (* -1 d2) 10)))
(* -1 (* d1 (- (* -1 d2) 10)))
(* 10 d1)
(+ (* 10 d1) (* d1 d2))
(+ (* 10 d1) (* d1 d2))
(+ (* 10 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 10 (/ d1 d2))))
(* d2 (+ d1 (* 10 (/ d1 d2))))
(* d2 (+ d1 (* 10 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* 10 d1)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
(* 20 d1)
Outputs
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* 30 d1)
(*.f64 d1 #s(literal 30 binary64))
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
30
#s(literal 30 binary64)
(+ 30 d2)
(+.f64 #s(literal 30 binary64) d2)
(+ 30 d2)
(+.f64 #s(literal 30 binary64) d2)
(+ 30 d2)
(+.f64 #s(literal 30 binary64) d2)
d2
(* d2 (+ 1 (* 30 (/ 1 d2))))
(+.f64 #s(literal 30 binary64) d2)
(* d2 (+ 1 (* 30 (/ 1 d2))))
(+.f64 #s(literal 30 binary64) d2)
(* d2 (+ 1 (* 30 (/ 1 d2))))
(+.f64 #s(literal 30 binary64) d2)
d2
(* d2 (+ 1 (* 30 (/ 1 d2))))
(+.f64 #s(literal 30 binary64) d2)
(* d2 (+ 1 (* 30 (/ 1 d2))))
(+.f64 #s(literal 30 binary64) d2)
(* d2 (+ 1 (* 30 (/ 1 d2))))
(+.f64 #s(literal 30 binary64) d2)
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 10 d1) (* 20 d1))
(*.f64 d1 #s(literal 30 binary64))
(+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 10 d1) (+ (* 20 d1) (* d1 d2)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d2 (+ d1 (+ (* 10 (/ d1 d2)) (* 20 (/ d1 d2)))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 10 d1) (* 20 d1)) d2)))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 10 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 (+ 10 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 (+ 10 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 (+ 10 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 (+ 10 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 (+ 10 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 (+ 10 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 (+ 10 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* -1 (* d1 (- (* -1 d2) 10)))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* -1 (* d1 (- (* -1 d2) 10)))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* -1 (* d1 (- (* -1 d2) 10)))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* -1 (* d1 (- (* -1 d2) 10)))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(+ (* 10 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(+ (* 10 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(+ (* 10 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 10 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d2 (+ d1 (* 10 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d2 (+ d1 (* 10 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* -1 (* d2 (+ (* -10 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 10 binary64)))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* 10 d1)
(*.f64 d1 #s(literal 10 binary64))
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))
(* 20 d1)
(*.f64 d1 #s(literal 20 binary64))

eval17.0ms (0.8%)

Compiler

Compiled 1502 to 68 computations (95.5% saved)

prune7.0ms (0.3%)

Pruning

5 alts after pruning (4 fresh and 1 done)

PrunedKeptTotal
New1884192
Fresh000
Picked112
Done000
Total1895194
Accuracy
100.0%
Counts
194 → 5
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
99.9%
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
99.9%
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
49.1%
(*.f64 d1 d2)
52.6%
(*.f64 d1 #s(literal 30 binary64))
Compiler

Compiled 34 to 23 computations (32.4% saved)

simplify4.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 d2)
cost-diff6400
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
cost-diff0
(*.f64 d1 #s(literal 30 binary64))
cost-diff0
(*.f64 d1 d2)
cost-diff128
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
cost-diff0
(*.f64 d1 d2)
cost-diff0
(*.f64 d1 #s(literal 30 binary64))
Rules
12×*-lowering-*.f32
12×*-lowering-*.f64
fma-lowering-fma.f32
fma-define
+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0735
11535
21835
01835
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* d1 30)
d1
30
(* d1 d2)
d1
d2
(+ (* d1 d2) (* d1 30))
(* d1 d2)
d1
d2
(* d1 30)
30
(+ (* d1 30) (* d1 d2))
d1
30
(* d1 d2)
d2
Outputs
(* d1 30)
(*.f64 d1 #s(literal 30 binary64))
d1
30
#s(literal 30 binary64)
(* d1 d2)
(*.f64 d1 d2)
d1
d2
(+ (* d1 d2) (* d1 30))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
d1
d2
(* d1 30)
(*.f64 d1 #s(literal 30 binary64))
30
#s(literal 30 binary64)
(+ (* d1 30) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
d1
30
#s(literal 30 binary64)
(* d1 d2)
(*.f64 d1 d2)
d2

localize61.0ms (2.8%)

Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d1 d2)
accuracy100.0%
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
accuracy100.0%
(*.f64 d1 d2)
accuracy100.0%
(*.f64 d1 #s(literal 30 binary64))
accuracy99.9%
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
accuracy100.0%
(*.f64 d1 d2)
accuracy100.0%
(*.f64 d1 #s(literal 30 binary64))
Results
40.0ms252×0valid
1.0ms2valid
0.0ms1valid
Compiler

Compiled 41 to 8 computations (80.5% saved)

Precisions
Click to see histograms. Total time spent on operations: 13.0ms
ival-mult: 5.0ms (39.1% of total)
ival-add: 3.0ms (23.4% of total)
compiled-spec: 3.0ms (23.4% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

series2.0ms (0.1%)

Counts
4 → 84
Calls
Call 1
Inputs
#<alt (* d1 30)>
#<alt (* d1 d2)>
#<alt (+ (* d1 d2) (* d1 30))>
#<alt (+ (* d1 30) (* d1 d2))>
Outputs
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* 30 d1)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 d2)>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* 30 d1)>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* d1 (+ 30 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* -1 (* d1 (- (* -1 d2) 30)))>
#<alt (* 30 d1)>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (+ (* 30 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 30 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))>
Calls

21 calls:

TimeVariablePointExpression
0.0ms
d1
@inf
(* d1 30)
0.0ms
d1
@-inf
(* d1 30)
0.0ms
d1
@inf
(+ (* d1 d2) (* d1 30))
0.0ms
d1
@0
(* d1 30)
0.0ms
d2
@0
(+ (* d1 d2) (* d1 30))

rewrite11.0ms (0.5%)

Algorithm
batch-egg-rewrite
Rules
12×*-lowering-*.f32
12×*-lowering-*.f64
fma-lowering-fma.f32
fma-define
+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
0716
11516
21816
01816
Stop Event
iter limit
saturated
Counts
4 → 20
Calls
Call 1
Inputs
(* d1 30)
(* d1 d2)
(+ (* d1 d2) (* d1 30))
(+ (* d1 30) (* d1 d2))
Outputs
(*.f64 d1 #s(literal 30 binary64))
(*.f64 #s(literal 30 binary64) d1)
(*.f64 d1 d2)
(*.f64 d2 d1)
(+.f64 (*.f64 d1 #s(literal 30 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 30 binary64)))
(fma.f64 #s(literal 30 binary64) d1 (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 30 binary64)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(*.f64 (+.f64 #s(literal 30 binary64) d2) d1)
(+.f64 (*.f64 d1 #s(literal 30 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 30 binary64)))
(fma.f64 #s(literal 30 binary64) d1 (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 30 binary64)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(*.f64 (+.f64 #s(literal 30 binary64) d2) d1)

simplify128.0ms (5.8%)

Algorithm
egg-herbie
Rules
2190×sum3-define
1814×fnmadd-define
1430×fmsub-define
1372×sum4-define
1340×fmm-def
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
023336
167336
2177336
3402336
4981336
53151336
67376336
08885336
Stop Event
iter limit
node limit
Counts
84 → 84
Calls
Call 1
Inputs
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* 30 d1)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 d2)
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(* 30 d1)
(+ (* 30 d1) (* d1 d2))
(+ (* 30 d1) (* d1 d2))
(+ (* 30 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* d1 (+ 30 d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(* -1 (* d1 (- (* -1 d2) 30)))
(* 30 d1)
(+ (* 30 d1) (* d1 d2))
(+ (* 30 d1) (* d1 d2))
(+ (* 30 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
Outputs
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 d2)
(*.f64 d1 d2)
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 (+ 30 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 30)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* 30 d1)
(*.f64 #s(literal 30 binary64) d1)
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(+ (* 30 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d2 (+ d1 (* 30 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(* -1 (* d2 (+ (* -30 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))

eval14.0ms (0.6%)

Compiler

Compiled 882 to 19 computations (97.8% saved)

prune6.0ms (0.3%)

Pruning

5 alts after pruning (0 fresh and 5 done)

PrunedKeptTotal
New1700170
Fresh000
Picked044
Done011
Total1705175
Accuracy
100.0%
Counts
175 → 5
Alt Table
Click to see full alt table
StatusAccuracyProgram
100.0%
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
99.9%
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
99.9%
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
49.1%
(*.f64 d1 d2)
52.6%
(*.f64 d1 #s(literal 30 binary64))
Compiler

Compiled 71 to 38 computations (46.5% saved)

regimes11.0ms (0.5%)

Counts
6 → 1
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 30 binary64))
(*.f64 d1 d2)
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
Outputs
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
Calls

3 calls:

3.0ms
(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
2.0ms
d2
2.0ms
d1
Results
AccuracySegmentsBranch
100.0%1d1
100.0%1d2
100.0%1(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
Compiler

Compiled 19 to 13 computations (31.6% saved)

regimes7.0ms (0.3%)

Counts
5 → 1
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 30 binary64))
(*.f64 d1 d2)
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 30 binary64)))
(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
Outputs
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
Calls

3 calls:

2.0ms
d1
2.0ms
(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
2.0ms
d2
Results
AccuracySegmentsBranch
99.9%1d1
99.9%1d2
99.9%1(+.f64 (+.f64 (*.f64 d1 #s(literal 10 binary64)) (*.f64 d1 d2)) (*.f64 d1 #s(literal 20 binary64)))
Compiler

Compiled 19 to 13 computations (31.6% saved)

regimes5.0ms (0.2%)

Counts
2 → 3
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 30 binary64))
(*.f64 d1 d2)
Outputs
(*.f64 d1 d2)
(*.f64 d1 #s(literal 30 binary64))
(*.f64 d1 d2)
Calls

2 calls:

3.0ms
d1
1.0ms
d2
Results
AccuracySegmentsBranch
59.3%3d1
97.5%3d2
Compiler

Compiled 6 to 4 computations (33.3% saved)

regimes3.0ms (0.1%)

Accuracy

Total -0.0b remaining (-0%)

Threshold costs -0b (-0%)

Counts
1 → 1
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 30 binary64))
Outputs
(*.f64 d1 #s(literal 30 binary64))
Calls

2 calls:

1.0ms
d1
1.0ms
d2
Results
AccuracySegmentsBranch
52.6%1d1
52.6%1d2
Compiler

Compiled 6 to 4 computations (33.3% saved)

bsearch32.0ms (1.5%)

Algorithm
binary-search
Stop Event
narrow-enough
narrow-enough
Steps
TimeLeftRight
14.0ms
0.0007063046126499715
53.59255946237762
15.0ms
-92.55125230594757
-3.026188283492866e-8
Results
20.0ms288×0valid
Compiler

Compiled 234 to 175 computations (25.2% saved)

Precisions
Click to see histograms. Total time spent on operations: 9.0ms
ival-mult: 6.0ms (66.2% of total)
ival-add: 3.0ms (33.1% of total)
const: 1.0ms (11% of total)
backward-pass: 0.0ms (0% of total)

simplify9.0ms (0.4%)

Algorithm
egg-herbie
Rules
*-commutative_binary64
+-commutative_binary64
if-if-or-not_binary32
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01329
12029
Stop Event
saturated
Calls
Call 1
Inputs
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
(if (<=.f64 d2 #s(literal -30 binary64)) (*.f64 d1 d2) (if (<=.f64 d2 #s(literal 30 binary64)) (*.f64 d1 #s(literal 30 binary64)) (*.f64 d1 d2)))
(*.f64 d1 #s(literal 30 binary64))
Outputs
(fma.f64 d1 #s(literal 30 binary64) (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 30 binary64)))
(*.f64 d1 (+.f64 #s(literal 30 binary64) d2))
(if (<=.f64 d2 #s(literal -30 binary64)) (*.f64 d1 d2) (if (<=.f64 d2 #s(literal 30 binary64)) (*.f64 d1 #s(literal 30 binary64)) (*.f64 d1 d2)))
(*.f64 d1 #s(literal 30 binary64))

soundness321.0ms (14.6%)

Rules
2096×fnmsub-define
1920×fmm-def
1918×fma-lowering-fma.f32
1918×fma-lowering-fma.f64
1354×*-lowering-*.f32
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
058516
1195516
2547516
31810516
44912516
08018516
01227
13027
26327
39027
49427
09427
099
1207
2475
3785
4865
5875
0875
Stop Event
done
iter limit
saturated
iter limit
saturated
iter limit
node limit
Compiler

Compiled 91 to 54 computations (40.7% saved)

preprocess51.0ms (2.3%)

Remove

(negabs d1)

Compiler

Compiled 138 to 74 computations (46.4% saved)

end0.0ms (0%)

Profiling

Loading profile data...