FastMath test3

Time bar (total: 3.6s)

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 15 to 10 computations (33.3% 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)

sample968.0ms (26.8%)

Results
629.0ms7803×0valid
89.0ms360×1valid
28.0ms93×2valid
Precisions
Click to see histograms. Total time spent on operations: 345.0ms
ival-mult: 229.0ms (66.3% of total)
ival-add: 86.0ms (24.9% of total)
backward-pass: 20.0ms (5.8% of total)
const: 11.0ms (3.2% of total)
Bogosity

preprocess82.0ms (2.3%)

Algorithm
egg-herbie
Rules
2740×sum3-define
1368×fnmadd-define
1236×sum4-define
1078×fma-define
1046×sum5-define
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
03798
113674
244966
3164865
4638065
5787565
099
1207
2476
3796
4946
5966
0966
Stop Event
iter limit
saturated
node limit
Calls
Call 1
Inputs
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
Outputs
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Call 2
Inputs
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(+ (+ (* (neg d1) 3) (* (neg d1) d2)) (* (neg d1) d3))
(+ (+ (* d1 3) (* d1 (neg d2))) (* d1 d3))
(+ (+ (* d1 3) (* d1 d2)) (* d1 (neg d3)))
(neg (+ (+ (* (neg d1) 3) (* (neg d1) d2)) (* (neg d1) d3)))
(neg (+ (+ (* d1 3) (* d1 (neg d2))) (* d1 d3)))
(neg (+ (+ (* d1 3) (* d1 d2)) (* d1 (neg d3))))
(+ (+ (* d2 3) (* d2 d1)) (* d2 d3))
(+ (+ (* d3 3) (* d3 d2)) (* d3 d1))
(+ (+ (* d1 3) (* d1 d3)) (* d1 d2))
Outputs
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(* d1 (sum3 3 d2 d3))
(+ (+ (* (neg d1) 3) (* (neg d1) d2)) (* (neg d1) d3))
(* d1 (- -3 (+ d2 d3)))
(+ (+ (* d1 3) (* d1 (neg d2))) (* d1 d3))
(* d1 (+ 3 (- d3 d2)))
(+ (+ (* d1 3) (* d1 d2)) (* d1 (neg d3)))
(* d1 (+ d2 (- 3 d3)))
(neg (+ (+ (* (neg d1) 3) (* (neg d1) d2)) (* (neg d1) d3)))
(* d1 (sum3 3 d2 d3))
(neg (+ (+ (* d1 3) (* d1 (neg d2))) (* d1 d3)))
(* d1 (+ d2 (- -3 d3)))
(neg (+ (+ (* d1 3) (* d1 d2)) (* d1 (neg d3))))
(* d1 (+ d3 (- -3 d2)))
(+ (+ (* d2 3) (* d2 d1)) (* d2 d3))
(* d2 (sum3 d1 3 d3))
(+ (+ (* d3 3) (* d3 d2)) (* d3 d1))
(* d3 (sum3 d1 3 d2))
(+ (+ (* d1 3) (* d1 d3)) (* d1 d2))
(* d1 (sum3 3 d2 d3))
Symmetry

(negabs d1)

(sort d2 d3)

explain117.0ms (3.2%)

FPErrors
Click to see full error table
Ground TruthOverpredictionsExampleUnderpredictionsExampleSubexpression
60-0-(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
00-0-d3
00-0-d1
00-0-d2
00-0-(*.f64 d1 d3)
00-0-(*.f64 d1 d2)
00-0-#s(literal 3 binary64)
00-0-(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
00-0-(*.f64 d1 #s(literal 3 binary64))
Results
60.0ms450×0valid
8.0ms36×1valid
8.0ms24×2valid
1.0ms3valid
Compiler

Compiled 84 to 29 computations (65.5% saved)

Precisions
Click to see histograms. Total time spent on operations: 22.0ms
ival-mult: 13.0ms (60.1% of total)
ival-add: 6.0ms (27.7% of total)
backward-pass: 2.0ms (9.2% of total)
const: 1.0ms (4.6% of total)

eval0.0ms (0%)

Compiler

Compiled 10 to 7 computations (30% saved)

prune1.0ms (0%)

Alt Table
Click to see full alt table
StatusAccuracyProgram
97.5%
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Compiler

Compiled 24 to 16 computations (33.3% saved)

simplify8.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d1 d2)
cost-diff0
(*.f64 d1 #s(literal 3 binary64))
cost-diff128
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
cost-diff256
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
cost-diff0
(+.f64 #s(literal 3 binary64) d3)
cost-diff0
(+.f64 d2 (+.f64 #s(literal 3 binary64) d3))
cost-diff0
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Rules
52×fma-define
48×fma-lowering-fma.f32
48×+-lowering-+.f64
48×+-lowering-+.f32
48×fma-lowering-fma.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01244
13341
27341
39841
410041
010041
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* d1 (+ d2 (+ 3 d3)))
d1
(+ d2 (+ 3 d3))
d2
(+ 3 d3)
3
d3
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(+ (* d1 3) (* d1 d2))
(* d1 3)
d1
3
(* d1 d2)
d2
(* d1 d3)
d3
Outputs
(* d1 (+ d2 (+ 3 d3)))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
d1
(+ d2 (+ 3 d3))
(+.f64 d2 (+.f64 #s(literal 3 binary64) d3))
d2
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
3
#s(literal 3 binary64)
d3
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(+ (* d1 3) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 3)
(*.f64 d1 #s(literal 3 binary64))
d1
3
#s(literal 3 binary64)
(* d1 d2)
(*.f64 d1 d2)
d2
(* d1 d3)
(*.f64 d1 d3)
d3

localize165.0ms (4.6%)

Localize:

Found 7 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d1 d2)
accuracy100.0%
(*.f64 d1 #s(literal 3 binary64))
accuracy99.8%
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
accuracy97.8%
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
accuracy100.0%
(+.f64 #s(literal 3 binary64) d3)
accuracy100.0%
(+.f64 d2 (+.f64 #s(literal 3 binary64) d3))
accuracy99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Results
138.0ms224×0valid
6.0ms13×2valid
6.0ms18×1valid
1.0ms3valid
Compiler

Compiled 54 to 13 computations (75.9% saved)

Precisions
Click to see histograms. Total time spent on operations: 119.0ms
ival-add: 108.0ms (90.9% of total)
ival-mult: 9.0ms (7.6% of total)
backward-pass: 2.0ms (1.7% of total)
const: 0.0ms (0% of total)

series111.0ms (3.1%)

Counts
7 → 168
Calls
Call 1
Inputs
#<alt (* d1 (+ d2 (+ 3 d3)))>
#<alt (+ d2 (+ 3 d3))>
#<alt (+ 3 d3)>
#<alt (+ (+ (* d1 3) (* d1 d2)) (* d1 d3))>
#<alt (+ (* d1 3) (* d1 d2))>
#<alt (* d1 3)>
#<alt (* d1 d2)>
Outputs
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 d3))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt (* d1 (+ 3 d2))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt (+ 3 d3)>
#<alt (+ 3 (+ d2 d3))>
#<alt (+ 3 (+ d2 d3))>
#<alt (+ 3 (+ d2 d3))>
#<alt d2>
#<alt (* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))>
#<alt (* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))>
#<alt (* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))>
#<alt d2>
#<alt (* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))>
#<alt (+ 3 d2)>
#<alt (+ 3 (+ d2 d3))>
#<alt (+ 3 (+ d2 d3))>
#<alt (+ 3 (+ d2 d3))>
#<alt d3>
#<alt (* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))>
#<alt (* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))>
#<alt (* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))>
#<alt d3>
#<alt (* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))>
#<alt 3>
#<alt (+ 3 d3)>
#<alt (+ 3 d3)>
#<alt (+ 3 d3)>
#<alt d3>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt d3>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))>
#<alt (* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))>
#<alt (* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))>
#<alt (* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 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)>
Calls

42 calls:

TimeVariablePointExpression
101.0ms
d1
@-inf
(* d1 3)
1.0ms
d1
@0
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
1.0ms
d1
@inf
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
0.0ms
d1
@0
(* d1 (+ d2 (+ 3 d3)))
0.0ms
d2
@-inf
(* d1 (+ d2 (+ 3 d3)))

rewrite27.0ms (0.7%)

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

Useful iterations: 1 (0.0ms)

IterNodesCost
01233
13330
27330
39830
410030
010030
Stop Event
iter limit
saturated
Counts
7 → 60
Calls
Call 1
Inputs
(* d1 (+ d2 (+ 3 d3)))
(+ d2 (+ 3 d3))
(+ 3 d3)
(+ (+ (* d1 3) (* d1 d2)) (* d1 d3))
(+ (* d1 3) (* d1 d2))
(* d1 3)
(* d1 d2)
Outputs
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 (+.f64 d2 d3)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d2 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d3) (*.f64 d1 d2))
(fma.f64 d1 (+.f64 d2 #s(literal 3 binary64)) (*.f64 d1 d3))
(fma.f64 d1 (+.f64 d2 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d2 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 (+.f64 d2 #s(literal 3 binary64)) d1 (*.f64 d1 d3))
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(*.f64 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)) d1)
(+.f64 d2 (+.f64 #s(literal 3 binary64) d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+.f64 d3 (+.f64 d2 #s(literal 3 binary64)))
(+.f64 (+.f64 #s(literal 3 binary64) d3) d2)
(+.f64 (+.f64 d2 #s(literal 3 binary64)) d3)
(+.f64 (+.f64 d2 d3) #s(literal 3 binary64))
(+.f64 #s(literal 3 binary64) d3)
(+.f64 d3 #s(literal 3 binary64))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 (+.f64 d2 d3)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 d3))
(+.f64 (*.f64 d1 d3) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 (+.f64 d2 d3)) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d2 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d3) (*.f64 d1 d2))
(fma.f64 d1 (+.f64 d2 #s(literal 3 binary64)) (*.f64 d1 d3))
(fma.f64 d1 (+.f64 d2 d3) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d2 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 (+.f64 d2 d3)))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 (+.f64 d2 #s(literal 3 binary64)) d1 (*.f64 d1 d3))
(fma.f64 (+.f64 d2 d3) d1 (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(*.f64 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)) d1)
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 (+.f64 d2 #s(literal 3 binary64)) d1)
(*.f64 d1 #s(literal 3 binary64))
(*.f64 #s(literal 3 binary64) d1)
(*.f64 d1 d2)
(*.f64 d2 d1)

simplify160.0ms (4.4%)

Algorithm
egg-herbie
Rules
2330×*-lowering-*.f32
2330×*-lowering-*.f64
1732×fnmadd-define
1378×sum5-define
1040×+-lowering-+.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
099816
1349738
2936738
32944738
47981738
08670738
Stop Event
iter limit
node limit
Counts
168 → 168
Calls
Call 1
Inputs
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 d3))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(* d1 (+ 3 d2))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(+ 3 d3)
(+ 3 (+ d2 d3))
(+ 3 (+ d2 d3))
(+ 3 (+ d2 d3))
d2
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
d2
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(+ 3 d2)
(+ 3 (+ d2 d3))
(+ 3 (+ d2 d3))
(+ 3 (+ d2 d3))
d3
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
d3
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
3
(+ 3 d3)
(+ 3 d3)
(+ 3 d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* 3 d1)
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 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)
Outputs
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
d2
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* d2 (+ 1 (+ (* 3 (/ 1 d2)) (/ d3 d2))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
d2
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* -1 (* d2 (- (* -1 (/ (+ 3 d3) d2)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 d2)
(+.f64 #s(literal 3 binary64) d2)
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(+ 3 (+ d2 d3))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
d3
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* d3 (+ 1 (+ (* 3 (/ 1 d3)) (/ d2 d3))))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
d3
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
(* -1 (* d3 (- (* -1 (/ (+ 3 d2) d3)) 1)))
(+.f64 #s(literal 3 binary64) (+.f64 d2 d3))
3
#s(literal 3 binary64)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (- (+ (* -1 d2) (* -1 d3)) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 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)

eval21.0ms (0.6%)

Compiler

Compiled 1807 to 72 computations (96% saved)

prune12.0ms (0.3%)

Pruning

9 alts after pruning (8 fresh and 1 done)

PrunedKeptTotal
New2208228
Fresh000
Picked112
Done000
Total2219230
Accuracy
100.0%
Counts
230 → 9
Alt Table
Click to see full alt table
StatusAccuracyProgram
98.4%
(fma.f64 (+.f64 d2 #s(literal 3 binary64)) d1 (*.f64 d1 d3))
99.2%
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
80.0%
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
82.4%
(*.f64 d1 (+.f64 d2 d3))
63.1%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
57.1%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
40.7%
(*.f64 d1 d3)
45.1%
(*.f64 d1 d2)
Compiler

Compiled 146 to 97 computations (33.6% saved)

simplify7.0ms (0.2%)

Algorithm
egg-herbie
Localize:

Found 11 expressions of interest:

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

Useful iterations: 2 (0.0ms)

IterNodesCost
01563
13361
26259
38459
49059
09059
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ (* (+ 3 d3) d1) (* d1 d2))
(+ 3 d3)
3
d3
d1
(* d1 d2)
d2
(* d1 d2)
d1
d2
(* d1 (+ 3 d3))
d1
(+ 3 d3)
3
d3
(* d1 (+ d2 d3))
d1
(+ d2 d3)
d2
d3
(+ (* (+ d2 3) d1) (* d1 d3))
(+ d2 3)
d2
3
d1
(* d1 d3)
d3
Outputs
(+ (* (+ 3 d3) d1) (* d1 d2))
(*.f64 d1 (+.f64 d3 (+.f64 #s(literal 3 binary64) d2)))
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
3
#s(literal 3 binary64)
d3
d1
(* d1 d2)
(*.f64 d1 d2)
d2
(* d1 d2)
(*.f64 d1 d2)
d1
d2
(* d1 (+ 3 d3))
(*.f64 (+.f64 #s(literal 3 binary64) d3) d1)
d1
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
3
#s(literal 3 binary64)
d3
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
d1
(+ d2 d3)
(+.f64 d3 d2)
d2
d3
(+ (* (+ d2 3) d1) (* d1 d3))
(*.f64 d1 (+.f64 d3 (+.f64 #s(literal 3 binary64) d2)))
(+ d2 3)
(+.f64 #s(literal 3 binary64) d2)
d2
3
#s(literal 3 binary64)
d1
(* d1 d3)
(*.f64 d3 d1)
d3

localize113.0ms (3.1%)

Localize:

Found 11 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(+.f64 d2 #s(literal 3 binary64))
accuracy100.0%
(*.f64 d1 d3)
accuracy98.4%
(fma.f64 (+.f64 d2 #s(literal 3 binary64)) d1 (*.f64 d1 d3))
accuracy100.0%
(+.f64 d2 d3)
accuracy100.0%
(*.f64 d1 (+.f64 d2 d3))
accuracy100.0%
(+.f64 #s(literal 3 binary64) d3)
accuracy99.9%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
accuracy100.0%
(*.f64 d1 d2)
accuracy100.0%
(+.f64 #s(literal 3 binary64) d3)
accuracy100.0%
(*.f64 d1 d2)
accuracy99.2%
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
Results
56.0ms230×0valid
30.0ms17×5exit
3.0ms2valid
2.0ms1valid
Compiler

Compiled 67 to 14 computations (79.1% saved)

Precisions
Click to see histograms. Total time spent on operations: 48.0ms
ival-mult: 18.0ms (37.7% of total)
compiled-spec: 15.0ms (31.4% of total)
ival-add: 9.0ms (18.9% of total)
backward-pass: 5.0ms (10.5% of total)
const: 0.0ms (0% of total)

series12.0ms (0.3%)

Counts
9 → 228
Calls
Call 1
Inputs
#<alt (+ (* (+ 3 d3) d1) (* d1 d2))>
#<alt (+ 3 d3)>
#<alt (* d1 d2)>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (+ d2 d3)>
#<alt (+ (* (+ d2 3) d1) (* d1 d3))>
#<alt (+ d2 3)>
#<alt (* d1 d3)>
Outputs
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))>
#<alt (* d1 (+ 3 d3))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (+ (* d1 d2) (* d1 (+ 3 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))>
#<alt 3>
#<alt (+ 3 d3)>
#<alt (+ 3 d3)>
#<alt (+ 3 d3)>
#<alt d3>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt d3>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<alt (* d3 (+ 1 (* 3 (/ 1 d3))))>
#<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 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 d3)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* d1 d2)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt d3>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt d2>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt (* d2 (+ 1 (/ d3 d2)))>
#<alt d2>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt (* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))>
#<alt d2>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt (+ d2 d3)>
#<alt d3>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt (* d3 (+ 1 (/ d2 d3)))>
#<alt d3>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* d1 (+ 3 (+ d2 d3)))>
#<alt (* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))>
#<alt (* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))>
#<alt (* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))>
#<alt (* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))>
#<alt (* d1 (+ 3 d2))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (+ (* d1 d3) (* d1 (+ 3 d2)))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))>
#<alt 3>
#<alt (+ 3 d2)>
#<alt (+ 3 d2)>
#<alt (+ 3 d2)>
#<alt d2>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt d2>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
Calls

57 calls:

TimeVariablePointExpression
3.0ms
d3
@inf
(+ (* (+ d2 3) d1) (* d1 d3))
1.0ms
d3
@0
(+ (* (+ 3 d3) d1) (* d1 d2))
0.0ms
d1
@-inf
(+ (* (+ 3 d3) d1) (* d1 d2))
0.0ms
d1
@-inf
(+ (* (+ d2 3) d1) (* d1 d3))
0.0ms
d1
@0
(+ (* (+ d2 3) d1) (* d1 d3))

rewrite14.0ms (0.4%)

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

Useful iterations: 2 (0.0ms)

IterNodesCost
01541
13339
26237
38437
49037
09037
Stop Event
iter limit
saturated
Counts
9 → 66
Calls
Call 1
Inputs
(+ (* (+ 3 d3) d1) (* d1 d2))
(+ 3 d3)
(* d1 d2)
(* d1 (+ 3 d3))
(* d1 (+ d2 d3))
(+ d2 d3)
(+ (* (+ d2 3) d1) (* d1 d3))
(+ d2 3)
(* d1 d3)
Outputs
(+.f64 (*.f64 (+.f64 #s(literal 3 binary64) d3) d1) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 (+.f64 #s(literal 3 binary64) d3) d1))
(+.f64 (*.f64 d1 (+.f64 d3 d2)) (*.f64 #s(literal 3 binary64) d1))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)) (*.f64 d3 d1))
(+.f64 (*.f64 d3 d1) (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(+.f64 (*.f64 #s(literal 3 binary64) d1) (*.f64 d1 (+.f64 d3 d2)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 (+.f64 d3 d2)))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d3 d2)))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d3) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 (+.f64 #s(literal 3 binary64) d3) d1))
(fma.f64 d1 (+.f64 d3 d2) (*.f64 #s(literal 3 binary64) d1))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d2) (*.f64 d3 d1))
(fma.f64 d2 d1 (*.f64 (+.f64 #s(literal 3 binary64) d3) d1))
(fma.f64 (+.f64 d3 d2) d1 (*.f64 #s(literal 3 binary64) d1))
(fma.f64 (+.f64 #s(literal 3 binary64) d2) d1 (*.f64 d3 d1))
(*.f64 d1 (+.f64 d3 (+.f64 #s(literal 3 binary64) d2)))
(*.f64 (+.f64 d3 (+.f64 #s(literal 3 binary64) d2)) d1)
(+.f64 #s(literal 3 binary64) d3)
(+.f64 d3 #s(literal 3 binary64))
(*.f64 d1 d2)
(*.f64 d2 d1)
(+.f64 (*.f64 d3 d1) (*.f64 #s(literal 3 binary64) d1))
(+.f64 (*.f64 #s(literal 3 binary64) d1) (*.f64 d3 d1))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d3 d1))
(fma.f64 d3 d1 (*.f64 #s(literal 3 binary64) d1))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
(fma.f64 d1 d3 (*.f64 #s(literal 3 binary64) d1))
(*.f64 (+.f64 #s(literal 3 binary64) d3) d1)
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+.f64 (*.f64 d1 d2) (*.f64 d3 d1))
(+.f64 (*.f64 d3 d1) (*.f64 d1 d2))
(fma.f64 d3 d1 (*.f64 d1 d2))
(fma.f64 d1 d3 (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d3 d1))
(fma.f64 d2 d1 (*.f64 d3 d1))
(*.f64 d1 (+.f64 d3 d2))
(*.f64 (+.f64 d3 d2) d1)
(+.f64 d3 d2)
(+.f64 d2 d3)
(+.f64 (*.f64 (+.f64 #s(literal 3 binary64) d3) d1) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 (+.f64 #s(literal 3 binary64) d3) d1))
(+.f64 (*.f64 d1 (+.f64 d3 d2)) (*.f64 #s(literal 3 binary64) d1))
(+.f64 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)) (*.f64 d3 d1))
(+.f64 (*.f64 d3 d1) (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(+.f64 (*.f64 #s(literal 3 binary64) d1) (*.f64 d1 (+.f64 d3 d2)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 (+.f64 d3 d2)))
(fma.f64 d3 d1 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 (+.f64 d3 d2)))
(fma.f64 d1 d3 (*.f64 d1 (+.f64 #s(literal 3 binary64) d2)))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d3) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 (+.f64 #s(literal 3 binary64) d3) d1))
(fma.f64 d1 (+.f64 d3 d2) (*.f64 #s(literal 3 binary64) d1))
(fma.f64 d1 (+.f64 #s(literal 3 binary64) d2) (*.f64 d3 d1))
(fma.f64 d2 d1 (*.f64 (+.f64 #s(literal 3 binary64) d3) d1))
(fma.f64 (+.f64 d3 d2) d1 (*.f64 #s(literal 3 binary64) d1))
(fma.f64 (+.f64 #s(literal 3 binary64) d2) d1 (*.f64 d3 d1))
(*.f64 d1 (+.f64 d3 (+.f64 #s(literal 3 binary64) d2)))
(*.f64 (+.f64 d3 (+.f64 #s(literal 3 binary64) d2)) d1)
(+.f64 #s(literal 3 binary64) d2)
(+.f64 d2 #s(literal 3 binary64))
(*.f64 d3 d1)
(*.f64 d1 d3)

simplify162.0ms (4.5%)

Algorithm
egg-herbie
Rules
3062×*-lowering-*.f32
3062×*-lowering-*.f64
1550×fmsub-define
1372×fnmsub-define
1262×+-lowering-+.f64
Iterations

Useful iterations: 1 (0.0ms)

IterNodesCost
01111010
1422950
21142950
33649950
08151950
Stop Event
iter limit
node limit
Counts
228 → 228
Calls
Call 1
Inputs
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))
(* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))
(* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))
(* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))
(* d1 (+ 3 d3))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
3
(+ 3 d3)
(+ 3 d3)
(+ 3 d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* d3 (+ 1 (* 3 (/ 1 d3))))
(* 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 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* 3 d1)
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 d3)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* d1 d2)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
d3
(+ d2 d3)
(+ d2 d3)
(+ d2 d3)
d2
(* d2 (+ 1 (/ d3 d2)))
(* d2 (+ 1 (/ d3 d2)))
(* d2 (+ 1 (/ d3 d2)))
d2
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
d2
(+ d2 d3)
(+ d2 d3)
(+ d2 d3)
d3
(* d3 (+ 1 (/ d2 d3)))
(* d3 (+ 1 (/ d2 d3)))
(* d3 (+ 1 (/ d2 d3)))
d3
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(* d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))
(* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))
(* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))
(* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))
(* d1 (+ 3 d2))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
3
(+ 3 d2)
(+ 3 d2)
(+ 3 d2)
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
Outputs
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (+ (* 3 (/ d1 d3)) (/ (* d1 d2) d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (+ (* -1 d2) (* -1 (+ 3 d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d2) (* d1 (+ 3 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (/ (* d1 (+ 3 d3)) d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
3
#s(literal 3 binary64)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
(+ 3 d3)
(+.f64 #s(literal 3 binary64) d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
d3
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* d3 (+ 1 (* 3 (/ 1 d3))))
(+.f64 #s(literal 3 binary64) d3)
(* 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 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* 3 d1)
(*.f64 #s(literal 3 binary64) d1)
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
d3
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
d2
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
(* d2 (+ 1 (/ d3 d2)))
(+.f64 d2 d3)
d2
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
(* -1 (* d2 (- (* -1 (/ d3 d2)) 1)))
(+.f64 d2 d3)
d2
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
(+ d2 d3)
(+.f64 d2 d3)
d3
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
(* d3 (+ 1 (/ d2 d3)))
(+.f64 d2 d3)
d3
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(* -1 (* d3 (- (* -1 (/ d2 d3)) 1)))
(+.f64 d2 d3)
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* 3 d1) (+ (* d1 d2) (* d1 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d2 (+ d1 (+ (* 3 (/ d1 d2)) (/ (* d1 d3) d2))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (+ (* 3 d1) (* d1 d3)) d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 (+ d2 d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d1 (+ (* -1 d3) (* -1 (+ 3 d2)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 #s(literal 3 binary64) d2))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(+ (* d1 d3) (* d1 (+ 3 d2)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d3 (+ d1 (/ (* d1 (+ 3 d2)) d3)))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 (+ 3 d2)) d3)))))
(*.f64 d1 (+.f64 #s(literal 3 binary64) (+.f64 d2 d3)))
3
#s(literal 3 binary64)
(+ 3 d2)
(+.f64 #s(literal 3 binary64) d2)
(+ 3 d2)
(+.f64 #s(literal 3 binary64) d2)
(+ 3 d2)
(+.f64 #s(literal 3 binary64) d2)
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 #s(literal 3 binary64) d2)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)

eval32.0ms (0.9%)

Compiler

Compiled 2061 to 66 computations (96.8% saved)

prune13.0ms (0.4%)

Pruning

13 alts after pruning (8 fresh and 5 done)

PrunedKeptTotal
New3286334
Fresh123
Picked145
Done011
Total33013343
Accuracy
100.0%
Counts
343 → 13
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.2%
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
81.6%
(fma.f64 d3 d1 (*.f64 d1 d2))
80.8%
(fma.f64 d2 d1 (*.f64 d3 d1))
57.2%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
63.1%
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
80.0%
(+.f64 (*.f64 d3 d1) (*.f64 d1 d2))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
82.4%
(*.f64 d1 (+.f64 d2 d3))
63.1%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
57.1%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
40.7%
(*.f64 d1 d3)
45.1%
(*.f64 d1 d2)
19.7%
(*.f64 d1 #s(literal 3 binary64))
Compiler

Compiled 175 to 115 computations (34.3% saved)

simplify5.0ms (0.1%)

Algorithm
egg-herbie
Localize:

Found 9 expressions of interest:

NewMetricScoreProgram
cost-diff0
(*.f64 d3 d1)
cost-diff6400
(fma.f64 d2 d1 (*.f64 d3 d1))
cost-diff0
(*.f64 d1 d2)
cost-diff6400
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
cost-diff0
(+.f64 d2 #s(literal 3 binary64))
cost-diff0
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
cost-diff0
(*.f64 d1 #s(literal 3 binary64))
cost-diff0
(*.f64 d1 d2)
cost-diff6400
(fma.f64 d3 d1 (*.f64 d1 d2))
Rules
20×*-lowering-*.f32
20×*-lowering-*.f64
16×fma-lowering-fma.f32
16×fma-define
16×+-lowering-+.f64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
01449
12749
23549
03549
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(+ (* d3 d1) (* d1 d2))
d3
d1
(* d1 d2)
d2
(* d1 3)
d1
3
(* d1 (+ d2 3))
d1
(+ d2 3)
d2
3
(+ (* 3 d1) (* d1 d2))
3
d1
(* d1 d2)
d2
(+ (* d2 d1) (* d3 d1))
d2
d1
(* d3 d1)
d3
Outputs
(+ (* d3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d3 d2))
d3
d1
(* d1 d2)
(*.f64 d1 d2)
d2
(* d1 3)
(*.f64 d1 #s(literal 3 binary64))
d1
3
#s(literal 3 binary64)
(* d1 (+ d2 3))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
d1
(+ d2 3)
(+.f64 d2 #s(literal 3 binary64))
d2
3
#s(literal 3 binary64)
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
3
#s(literal 3 binary64)
d1
(* d1 d2)
(*.f64 d1 d2)
d2
(+ (* d2 d1) (* d3 d1))
(*.f64 d1 (+.f64 d3 d2))
d2
d1
(* d3 d1)
(*.f64 d3 d1)
d3

localize116.0ms (3.2%)

Localize:

Found 9 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d3 d1)
accuracy98.4%
(fma.f64 d2 d1 (*.f64 d3 d1))
accuracy100.0%
(*.f64 d1 d2)
accuracy100.0%
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
accuracy100.0%
(+.f64 d2 #s(literal 3 binary64))
accuracy100.0%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
accuracy100.0%
(*.f64 d1 #s(literal 3 binary64))
accuracy100.0%
(*.f64 d1 d2)
accuracy99.2%
(fma.f64 d3 d1 (*.f64 d1 d2))
Results
55.0ms231×0valid
36.0ms25×5exit
Compiler

Compiled 56 to 13 computations (76.8% saved)

Precisions
Click to see histograms. Total time spent on operations: 46.0ms
ival-mult: 17.0ms (37.3% of total)
compiled-spec: 16.0ms (35.1% of total)
ival-add: 7.0ms (15.3% of total)
backward-pass: 5.0ms (11% of total)
const: 0.0ms (0% of total)

series3.0ms (0.1%)

Counts
8 → 192
Calls
Call 1
Inputs
#<alt (+ (* d3 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d1 3)>
#<alt (* d1 (+ d2 3))>
#<alt (+ d2 3)>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* d2 d1) (* d3 d1))>
#<alt (* d3 d1)>
Outputs
#<alt (* d1 d2)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* d1 d3)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) 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 d2)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* 3 d1)>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt 3>
#<alt (+ 3 d2)>
#<alt (+ 3 d2)>
#<alt (+ 3 d2)>
#<alt d2>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt d2>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d2 (+ 1 (* 3 (/ 1 d2))))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* d1 (+ 3 d2))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* -1 (* d1 (- (* -1 d2) 3)))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (+ (* 3 d1) (* d1 d2))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d2 (+ d1 (* 3 (/ d1 d2))))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))>
#<alt (* d1 d3)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* d1 d2)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
Calls

48 calls:

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

rewrite11.0ms (0.3%)

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

Useful iterations: 0 (0.0ms)

IterNodesCost
01432
12732
23532
03532
Stop Event
iter limit
saturated
Counts
8 → 40
Calls
Call 1
Inputs
(+ (* d3 d1) (* d1 d2))
(* d1 d2)
(* d1 3)
(* d1 (+ d2 3))
(+ d2 3)
(+ (* 3 d1) (* d1 d2))
(+ (* d2 d1) (* d3 d1))
(* d3 d1)
Outputs
(+.f64 (*.f64 d3 d1) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d3 d1))
(fma.f64 d3 d1 (*.f64 d1 d2))
(fma.f64 d1 d3 (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d3 d1))
(fma.f64 d2 d1 (*.f64 d3 d1))
(*.f64 d1 (+.f64 d3 d2))
(*.f64 (+.f64 d3 d2) d1)
(*.f64 d1 d2)
(*.f64 d2 d1)
(*.f64 d1 #s(literal 3 binary64))
(*.f64 #s(literal 3 binary64) d1)
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 (+.f64 d2 #s(literal 3 binary64)) d1)
(+.f64 d2 #s(literal 3 binary64))
(+.f64 #s(literal 3 binary64) d2)
(+.f64 (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 (+.f64 d2 #s(literal 3 binary64)) d1)
(+.f64 (*.f64 d3 d1) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d3 d1))
(fma.f64 d3 d1 (*.f64 d1 d2))
(fma.f64 d1 d3 (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d3 d1))
(fma.f64 d2 d1 (*.f64 d3 d1))
(*.f64 d1 (+.f64 d3 d2))
(*.f64 (+.f64 d3 d2) d1)
(*.f64 d3 d1)
(*.f64 d1 d3)

simplify155.0ms (4.3%)

Algorithm
egg-herbie
Rules
2096×fnmadd-define
2056×fma-lowering-fma.f32
2056×fma-lowering-fma.f64
1938×fmsub-define
1854×fnmsub-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
051774
1180774
2518774
31548774
44442774
08124774
Stop Event
iter limit
node limit
Counts
192 → 192
Calls
Call 1
Inputs
(* d1 d2)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* d1 d3)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) 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 d2)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* 3 d1)
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* 3 d1)
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
3
(+ 3 d2)
(+ 3 d2)
(+ 3 d2)
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* d1 (+ 3 d2))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* -1 (* d1 (- (* -1 d2) 3)))
(* 3 d1)
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(+ (* 3 d1) (* d1 d2))
(* d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(* d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(* d1 d3)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* d1 d2)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
Outputs
(* d1 d2)
(*.f64 d1 d2)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* 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)
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
3
#s(literal 3 binary64)
(+ 3 d2)
(+.f64 d2 #s(literal 3 binary64))
(+ 3 d2)
(+.f64 d2 #s(literal 3 binary64))
(+ 3 d2)
(+.f64 d2 #s(literal 3 binary64))
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 d2 #s(literal 3 binary64))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 d2 #s(literal 3 binary64))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 d2 #s(literal 3 binary64))
d2
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 d2 #s(literal 3 binary64))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 d2 #s(literal 3 binary64))
(* d2 (+ 1 (* 3 (/ 1 d2))))
(+.f64 d2 #s(literal 3 binary64))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 (+ 3 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* -1 (* d1 (- (* -1 d2) 3)))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(+ (* 3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d2 (+ d1 (* 3 (/ d1 d2))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* -1 (* d2 (+ (* -3 (/ d1 d2)) (* -1 d1))))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(* d1 d3)
(*.f64 d1 d3)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d2)
(*.f64 d1 d2)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d2 d3))
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)

eval24.0ms (0.7%)

Compiler

Compiled 1333 to 35 computations (97.4% saved)

prune7.0ms (0.2%)

Pruning

13 alts after pruning (3 fresh and 10 done)

PrunedKeptTotal
New2580258
Fresh033
Picked055
Done055
Total25813271
Accuracy
100.0%
Counts
271 → 13
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.2%
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
81.6%
(fma.f64 d3 d1 (*.f64 d1 d2))
80.8%
(fma.f64 d2 d1 (*.f64 d3 d1))
57.2%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
63.1%
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
80.0%
(+.f64 (*.f64 d3 d1) (*.f64 d1 d2))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
82.4%
(*.f64 d1 (+.f64 d2 d3))
63.1%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
57.1%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
40.7%
(*.f64 d1 d3)
45.1%
(*.f64 d1 d2)
19.7%
(*.f64 d1 #s(literal 3 binary64))
Compiler

Compiled 109 to 72 computations (33.9% saved)

simplify5.0ms (0.1%)

Algorithm
egg-herbie
Localize:

Found 6 expressions of interest:

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

Useful iterations: 1 (0.0ms)

IterNodesCost
01032
11630
23030
33230
03230
Stop Event
iter limit
saturated
Calls
Call 1
Inputs
(* d1 d3)
d1
d3
(+ (* d3 d1) (* d1 d2))
(* d3 d1)
d3
d1
(* d1 d2)
d2
(+ (* d1 3) (* d3 d1))
d1
3
(* d3 d1)
d3
Outputs
(* d1 d3)
(*.f64 d1 d3)
d1
d3
(+ (* d3 d1) (* d1 d2))
(*.f64 d1 (+.f64 d3 d2))
(* d3 d1)
(*.f64 d1 d3)
d3
d1
(* d1 d2)
(*.f64 d1 d2)
d2
(+ (* d1 3) (* d3 d1))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
d1
3
#s(literal 3 binary64)
(* d3 d1)
(*.f64 d1 d3)
d3

localize62.0ms (1.7%)

Localize:

Found 6 expressions of interest:

NewMetricScoreProgram
accuracy100.0%
(*.f64 d3 d1)
accuracy100.0%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
accuracy100.0%
(*.f64 d3 d1)
accuracy100.0%
(*.f64 d1 d2)
accuracy97.8%
(+.f64 (*.f64 d3 d1) (*.f64 d1 d2))
accuracy100.0%
(*.f64 d1 d3)
Results
40.0ms232×0valid
6.0ms13×2valid
3.0ms11×1valid
Compiler

Compiled 37 to 10 computations (73% saved)

Precisions
Click to see histograms. Total time spent on operations: 25.0ms
ival-mult: 10.0ms (40.2% of total)
compiled-spec: 6.0ms (24.1% of total)
const: 4.0ms (16.1% of total)
ival-add: 3.0ms (12.1% of total)
backward-pass: 1.0ms (4% of total)

series2.0ms (0%)

Counts
5 → 132
Calls
Call 1
Inputs
#<alt (* d1 d3)>
#<alt (+ (* d3 d1) (* d1 d2))>
#<alt (* d3 d1)>
#<alt (* d1 d2)>
#<alt (+ (* d1 3) (* d3 d1))>
Outputs
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d2)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d3 (+ d1 (/ (* d1 d2) d3)))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* d1 (+ d2 d3))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* -1 (* d1 (+ (* -1 d2) (* -1 d3))))>
#<alt (* d1 d3)>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (+ (* d1 d2) (* d1 d3))>
#<alt (* d1 d2)>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d2 (+ d1 (/ (* d1 d3) d2)))>
#<alt (* d1 d2)>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<alt (* d1 d3)>
#<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 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* d1 (+ 3 d3))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* -1 (* d1 (- (* -1 d3) 3)))>
#<alt (* 3 d1)>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (+ (* 3 d1) (* d1 d3))>
#<alt (* d1 d3)>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d3 (+ d1 (* 3 (/ d1 d3))))>
#<alt (* d1 d3)>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
#<alt (* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))>
Calls

33 calls:

TimeVariablePointExpression
0.0ms
d1
@-inf
(+ (* d1 3) (* d3 d1))
0.0ms
d1
@inf
(+ (* d1 3) (* d3 d1))
0.0ms
d1
@0
(+ (* d1 3) (* d3 d1))
0.0ms
d3
@-inf
(+ (* d1 3) (* d3 d1))
0.0ms
d3
@inf
(+ (* d1 3) (* d3 d1))

rewrite12.0ms (0.3%)

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

Useful iterations: 1 (0.0ms)

IterNodesCost
01021
11619
23019
33219
03219
Stop Event
iter limit
saturated
Counts
5 → 22
Calls
Call 1
Inputs
(* d1 d3)
(+ (* d3 d1) (* d1 d2))
(* d3 d1)
(* d1 d2)
(+ (* d1 3) (* d3 d1))
Outputs
(*.f64 d1 d3)
(*.f64 d3 d1)
(+.f64 (*.f64 d1 d3) (*.f64 d1 d2))
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
(fma.f64 d1 d3 (*.f64 d1 d2))
(fma.f64 d1 d2 (*.f64 d1 d3))
(fma.f64 d3 d1 (*.f64 d1 d2))
(fma.f64 d2 d1 (*.f64 d1 d3))
(*.f64 d1 (+.f64 d3 d2))
(*.f64 (+.f64 d3 d2) d1)
(*.f64 d1 d3)
(*.f64 d3 d1)
(*.f64 d1 d2)
(*.f64 d2 d1)
(+.f64 (*.f64 d1 d3) (*.f64 d1 #s(literal 3 binary64)))
(+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d3))
(fma.f64 d1 d3 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d1 d3))
(fma.f64 d3 d1 (*.f64 d1 #s(literal 3 binary64)))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(*.f64 (+.f64 d3 #s(literal 3 binary64)) d1)

simplify107.0ms (3%)

Algorithm
egg-herbie
Rules
2226×fnmadd-define
2022×fnmsub-define
1562×*-lowering-*.f32
1562×*-lowering-*.f64
1024×sum4-define
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
046498
1161498
2481498
31274498
44041498
08497498
Stop Event
iter limit
node limit
Counts
132 → 132
Calls
Call 1
Inputs
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d2)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(* d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* d1 (+ d2 d3))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(* d1 d3)
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(+ (* d1 d2) (* d1 d3))
(* d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(* d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* d1 d3)
(* 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 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* d1 (+ 3 d3))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* -1 (* d1 (- (* -1 d3) 3)))
(* 3 d1)
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(+ (* 3 d1) (* d1 d3))
(* d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(* d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
Outputs
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d2)
(*.f64 d1 d2)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d3 d2))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d3 d2))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d3 d2))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d3 d2))
(* d3 (+ d1 (/ (* d1 d2) d3)))
(*.f64 d1 (+.f64 d3 d2))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d3 d2))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d3 d2))
(* -1 (* d3 (+ (* -1 d1) (* -1 (/ (* d1 d2) d3)))))
(*.f64 d1 (+.f64 d3 d2))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 (+ d2 d3))
(*.f64 d1 (+.f64 d3 d2))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d3 d2))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d3 d2))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d3 d2))
(* -1 (* d1 (+ (* -1 d2) (* -1 d3))))
(*.f64 d1 (+.f64 d3 d2))
(* d1 d3)
(*.f64 d1 d3)
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d3 d2))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d3 d2))
(+ (* d1 d2) (* d1 d3))
(*.f64 d1 (+.f64 d3 d2))
(* d1 d2)
(*.f64 d1 d2)
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d3 d2))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d3 d2))
(* d2 (+ d1 (/ (* d1 d3) d2)))
(*.f64 d1 (+.f64 d3 d2))
(* d1 d2)
(*.f64 d1 d2)
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d3 d2))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d3 d2))
(* -1 (* d2 (+ (* -1 d1) (* -1 (/ (* d1 d3) d2)))))
(*.f64 d1 (+.f64 d3 d2))
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* d1 d3)
(*.f64 d1 d3)
(* 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 (+ 3 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 (+ 3 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* -1 (* d1 (- (* -1 d3) 3)))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* 3 d1)
(*.f64 d1 #s(literal 3 binary64))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(+ (* 3 d1) (* d1 d3))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 d3)
(*.f64 d1 d3)
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d3 (+ d1 (* 3 (/ d1 d3))))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* d1 d3)
(*.f64 d1 d3)
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))
(* -1 (* d3 (+ (* -3 (/ d1 d3)) (* -1 d1))))
(*.f64 d1 (+.f64 d3 #s(literal 3 binary64)))

eval17.0ms (0.5%)

Compiler

Compiled 979 to 30 computations (96.9% saved)

prune9.0ms (0.3%)

Pruning

13 alts after pruning (0 fresh and 13 done)

PrunedKeptTotal
New1800180
Fresh000
Picked033
Done01010
Total18013193
Accuracy
100.0%
Counts
193 → 13
Alt Table
Click to see full alt table
StatusAccuracyProgram
99.2%
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
81.6%
(fma.f64 d3 d1 (*.f64 d1 d2))
80.8%
(fma.f64 d2 d1 (*.f64 d3 d1))
57.2%
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
63.1%
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
80.0%
(+.f64 (*.f64 d3 d1) (*.f64 d1 d2))
99.9%
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
82.4%
(*.f64 d1 (+.f64 d2 d3))
63.1%
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
57.1%
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
40.7%
(*.f64 d1 d3)
45.1%
(*.f64 d1 d2)
19.7%
(*.f64 d1 #s(literal 3 binary64))
Compiler

Compiled 208 to 98 computations (52.9% saved)

regimes24.0ms (0.7%)

Counts
16 → 1
Calls
Call 1
Inputs
(*.f64 d1 #s(literal 3 binary64))
(*.f64 d1 d2)
(*.f64 d1 d3)
(*.f64 d1 (+.f64 #s(literal 3 binary64) d3))
(*.f64 d1 (+.f64 d2 #s(literal 3 binary64)))
(*.f64 d1 (+.f64 d2 d3))
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(+.f64 (*.f64 d1 d2) (*.f64 d1 d3))
(+.f64 (*.f64 d3 d1) (*.f64 d1 d2))
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
(fma.f64 #s(literal 3 binary64) d1 (*.f64 d1 d2))
(fma.f64 d1 #s(literal 3 binary64) (*.f64 d3 d1))
(fma.f64 d2 d1 (*.f64 d3 d1))
(fma.f64 d3 d1 (*.f64 d1 d2))
(fma.f64 (+.f64 #s(literal 3 binary64) d3) d1 (*.f64 d1 d2))
(fma.f64 (+.f64 d2 #s(literal 3 binary64)) d1 (*.f64 d1 d3))
Outputs
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
Calls

4 calls:

8.0ms
d1
5.0ms
d3
5.0ms
d2
5.0ms
(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
Results
AccuracySegmentsBranch
99.9%1d1
99.9%1d2
99.9%1d3
99.9%1(+.f64 (+.f64 (*.f64 d1 #s(literal 3 binary64)) (*.f64 d1 d2)) (*.f64 d1 d3))
Compiler

Compiled 26 to 18 computations (30.8% saved)

regimes9.0ms (0.2%)

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

3 calls:

3.0ms
d1
3.0ms
d2
3.0ms
d3
Results
AccuracySegmentsBranch
82.4%1d1
98.9%2d2
98.9%2d3
Compiler

Compiled 12 to 9 computations (25% saved)

regimes7.0ms (0.2%)

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

2 calls:

4.0ms
d2
3.0ms
d3
Results
AccuracySegmentsBranch
95.6%2d2
92.9%2d3
Compiler

Compiled 8 to 6 computations (25% saved)

regimes3.0ms (0.1%)

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

1 calls:

2.0ms
d2
Results
AccuracySegmentsBranch
94.9%2d2
Compiler

Compiled 4 to 3 computations (25% saved)

regimes6.0ms (0.2%)

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

3 calls:

2.0ms
d1
2.0ms
d3
2.0ms
d2
Results
AccuracySegmentsBranch
51.9%3d1
75.5%2d3
78.2%2d2
Compiler

Compiled 12 to 9 computations (25% saved)

regimes3.0ms (0.1%)

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

2 calls:

2.0ms
d3
2.0ms
d2
Results
AccuracySegmentsBranch
45.1%1d3
61.7%2d2
Compiler

Compiled 8 to 6 computations (25% saved)

regimes4.0ms (0.1%)

Accuracy

Total -0.0b remaining (-0%)

Threshold costs -0b (-0%)

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

3 calls:

1.0ms
d2
1.0ms
d3
1.0ms
d1
Results
AccuracySegmentsBranch
19.7%1d3
19.7%1d1
19.7%1d2
Compiler

Compiled 12 to 9 computations (25% saved)

bsearch15.0ms (0.4%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
14.0ms
1.352754669176478e-6
0.022006692557143076
Results
10.0ms128×0valid
Compiler

Compiled 164 to 118 computations (28% saved)

Precisions
Click to see histograms. Total time spent on operations: 5.0ms
ival-mult: 4.0ms (78.7% of total)
ival-add: 1.0ms (19.7% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

bsearch10.0ms (0.3%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
10.0ms
-475863.4329809071
-104941.39370016241
Results
6.0ms96×0valid
Compiler

Compiled 128 to 98 computations (23.4% saved)

Precisions
Click to see histograms. Total time spent on operations: 3.0ms
ival-mult: 2.0ms (67% of total)
ival-add: 1.0ms (33.5% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

bsearch12.0ms (0.3%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
11.0ms
-475863.4329809071
-104941.39370016241
Results
8.0ms96×0valid
Compiler

Compiled 116 to 86 computations (25.9% saved)

Precisions
Click to see histograms. Total time spent on operations: 3.0ms
ival-mult: 2.0ms (66.5% of total)
ival-add: 1.0ms (33.3% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

bsearch10.0ms (0.3%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
9.0ms
-475863.4329809071
-104941.39370016241
Results
6.0ms96×0valid
Compiler

Compiled 104 to 74 computations (28.8% saved)

Precisions
Click to see histograms. Total time spent on operations: 3.0ms
ival-mult: 2.0ms (68.2% of total)
ival-add: 1.0ms (34.1% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

bsearch12.0ms (0.3%)

Algorithm
binary-search
Stop Event
narrow-enough
Steps
TimeLeftRight
11.0ms
-475863.4329809071
-104941.39370016241
Results
8.0ms96×0valid
Compiler

Compiled 104 to 80 computations (23.1% saved)

Precisions
Click to see histograms. Total time spent on operations: 5.0ms
ival-mult: 4.0ms (83% of total)
ival-add: 1.0ms (20.8% of total)
const: 0.0ms (0% of total)
backward-pass: 0.0ms (0% of total)

simplify8.0ms (0.2%)

Algorithm
egg-herbie
Rules
14×*-commutative_binary64
+-commutative_binary64
Iterations

Useful iterations: 0 (0.0ms)

IterNodesCost
03070
14170
Stop Event
saturated
Calls
Call 1
Inputs
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d3 #s(literal 3170534137668829/144115188075855872 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 (+.f64 d2 d3)))
(if (<=.f64 d2 #s(literal -162000 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -330000 binary64)) (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -470000 binary64)) (*.f64 d1 d2) (*.f64 d1 d3))
(if (<=.f64 d2 #s(literal -105000 binary64)) (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 #s(literal 3 binary64))
Outputs
(*.f64 d1 (+.f64 d2 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d3 #s(literal 3170534137668829/144115188075855872 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 (+.f64 d2 d3)))
(if (<=.f64 d2 #s(literal -162000 binary64)) (*.f64 d1 (+.f64 d2 #s(literal 3 binary64))) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -330000 binary64)) (*.f64 d1 d2) (*.f64 d1 (+.f64 #s(literal 3 binary64) d3)))
(if (<=.f64 d2 #s(literal -470000 binary64)) (*.f64 d1 d2) (*.f64 d1 d3))
(if (<=.f64 d2 #s(literal -105000 binary64)) (*.f64 d1 d2) (*.f64 d1 #s(literal 3 binary64)))
(*.f64 d1 #s(literal 3 binary64))

soundness870.0ms (24.1%)

Rules
3062×*-lowering-*.f32
3062×*-lowering-*.f64
2330×*-lowering-*.f32
2330×*-lowering-*.f64
1732×fnmadd-define
Iterations

Useful iterations: 2 (0.0ms)

IterNodesCost
01111010
1422950
21142950
33649950
08151950
099
1207
2476
3796
4946
5966
0966
099816
1349738
2936738
32944738
47981738
08670738
Stop Event
done
iter limit
node limit
iter limit
saturated
iter limit
node limit
Compiler

Compiled 285 to 181 computations (36.5% saved)

preprocess53.0ms (1.5%)

Remove

(sort d2 d3)

(negabs d1)

Compiler

Compiled 274 to 148 computations (46% saved)

end0.0ms (0%)

Profiling

Loading profile data...